1*b1cdbd2cSJim Jagielski#!/usr/bin/perl
2*b1cdbd2cSJim Jagielski
3*b1cdbd2cSJim Jagielski#########################################################################
4*b1cdbd2cSJim Jagielski
5*b1cdbd2cSJim Jagielski #**************************************************************
6*b1cdbd2cSJim Jagielski#
7*b1cdbd2cSJim Jagielski#  Licensed to the Apache Software Foundation (ASF) under one
8*b1cdbd2cSJim Jagielski#  or more contributor license agreements.  See the NOTICE file
9*b1cdbd2cSJim Jagielski#  distributed with this work for additional information
10*b1cdbd2cSJim Jagielski#  regarding copyright ownership.  The ASF licenses this file
11*b1cdbd2cSJim Jagielski#  to you under the Apache License, Version 2.0 (the
12*b1cdbd2cSJim Jagielski#  "License"); you may not use this file except in compliance
13*b1cdbd2cSJim Jagielski#  with the License.  You may obtain a copy of the License at
14*b1cdbd2cSJim Jagielski#
15*b1cdbd2cSJim Jagielski#    http://www.apache.org/licenses/LICENSE-2.0
16*b1cdbd2cSJim Jagielski#
17*b1cdbd2cSJim Jagielski#  Unless required by applicable law or agreed to in writing,
18*b1cdbd2cSJim Jagielski#  software distributed under the License is distributed on an
19*b1cdbd2cSJim Jagielski#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
20*b1cdbd2cSJim Jagielski#  KIND, either express or implied.  See the License for the
21*b1cdbd2cSJim Jagielski#  specific language governing permissions and limitations
22*b1cdbd2cSJim Jagielski#  under the License.
23*b1cdbd2cSJim Jagielski#
24*b1cdbd2cSJim Jagielski#**************************************************************
25*b1cdbd2cSJim Jagielski
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski
28*b1cdbd2cSJim Jagielski$compare_home = "$ENV{QA_COMPARATOR_HOME}";
29*b1cdbd2cSJim Jagielski
30*b1cdbd2cSJim Jagielskiif ($ENV{'CLASSPATH'})
31*b1cdbd2cSJim Jagielski{
32*b1cdbd2cSJim Jagielski   $classpath_val = "$compare_home:$ENV{'CLASSPATH'}";
33*b1cdbd2cSJim Jagielski}
34*b1cdbd2cSJim Jagielskielse
35*b1cdbd2cSJim Jagielski{
36*b1cdbd2cSJim Jagielski   $classpath_val = "$compare_home";
37*b1cdbd2cSJim Jagielski}
38*b1cdbd2cSJim Jagielski
39*b1cdbd2cSJim Jagielskiprint "classpath is $classpath_val\n";
40*b1cdbd2cSJim Jagielski
41*b1cdbd2cSJim Jagielski$list_file="";
42*b1cdbd2cSJim Jagielski$orig_dir="";
43*b1cdbd2cSJim Jagielski$new_dir="";
44*b1cdbd2cSJim Jagielski$diff_type="";
45*b1cdbd2cSJim Jagielski
46*b1cdbd2cSJim Jagielski####### BEGIN MAIN ##############
47*b1cdbd2cSJim Jagielski$cmdline_len = @ARGV;
48*b1cdbd2cSJim Jagielskiif ($cmdline_len <= 0)
49*b1cdbd2cSJim Jagielski{
50*b1cdbd2cSJim Jagielski	print_usage();
51*b1cdbd2cSJim Jagielski	exit (0);
52*b1cdbd2cSJim Jagielski}
53*b1cdbd2cSJim Jagielski
54*b1cdbd2cSJim Jagielskiprocess_cmdline(@ARGV);
55*b1cdbd2cSJim Jagielskiprint_env();
56*b1cdbd2cSJim Jagielskiopen (LOGFILE, ">$logfile") || die "Cannot open log file $logfile";
57*b1cdbd2cSJim Jagielskiif ($test_list ne "")
58*b1cdbd2cSJim Jagielski{
59*b1cdbd2cSJim Jagielski	open (TESTLIST, $test_list) || die "Couldn't open diff list file $test_list";
60*b1cdbd2cSJim Jagielski
61*b1cdbd2cSJim Jagielski	while (<TESTLIST>)
62*b1cdbd2cSJim Jagielski	{
63*b1cdbd2cSJim Jagielski		chomp $_;
64*b1cdbd2cSJim Jagielski		process_diff(get_file_title($_));
65*b1cdbd2cSJim Jagielski	}
66*b1cdbd2cSJim Jagielski}
67*b1cdbd2cSJim Jagielskiclose TESTLIST;
68*b1cdbd2cSJim Jagielskiclose LOGFILE;
69*b1cdbd2cSJim Jagielski
70*b1cdbd2cSJim Jagielski####### END MAIN ##############
71*b1cdbd2cSJim Jagielski
72*b1cdbd2cSJim Jagielskisub process_diff
73*b1cdbd2cSJim Jagielski{
74*b1cdbd2cSJim Jagielski	$_[0] =~ tr/A-Z/a-z/;
75*b1cdbd2cSJim Jagielski
76*b1cdbd2cSJim Jagielski    # chdir to the output directory so the temporary files created by
77*b1cdbd2cSJim Jagielski    # the java programs are put in the right place.
78*b1cdbd2cSJim Jagielski    #
79*b1cdbd2cSJim Jagielski    chdir ($xml_new);
80*b1cdbd2cSJim Jagielski
81*b1cdbd2cSJim Jagielski	if ($diff_type eq "xml")
82*b1cdbd2cSJim Jagielski	{
83*b1cdbd2cSJim Jagielski        # Ugly hack, probably a way to tell xerces directly that the dtd's
84*b1cdbd2cSJim Jagielski        # are in $compare_home/dtd.
85*b1cdbd2cSJim Jagielski        #
86*b1cdbd2cSJim Jagielski        `cp $compare_home/dtd/* $xml_new`;
87*b1cdbd2cSJim Jagielski
88*b1cdbd2cSJim Jagielski		$cmd = "java -classpath $classpath_val XmlWrapper $xml_orig/$_[0].sxw $xml_new/$_[0].sxw";
89*b1cdbd2cSJim Jagielski		$val = system($cmd)/256;
90*b1cdbd2cSJim Jagielski		if ($val == 2)
91*b1cdbd2cSJim Jagielski		{
92*b1cdbd2cSJim Jagielski			print LOGFILE "$_[0]|TRUE|$xml_orig/$_[0].sxw|$xml_new/$_[0].sxw\n";
93*b1cdbd2cSJim Jagielski		}
94*b1cdbd2cSJim Jagielski		elsif($val == 3)
95*b1cdbd2cSJim Jagielski		{
96*b1cdbd2cSJim Jagielski			print LOGFILE "$_[0]|FALSE|$xml_orig/$_[0].sxw|$xml_new/$_[0].sxw\n";
97*b1cdbd2cSJim Jagielski		}
98*b1cdbd2cSJim Jagielski		else
99*b1cdbd2cSJim Jagielski		{
100*b1cdbd2cSJim Jagielski			print LOGFILE "$_[0]|ERROR|$xml_orig/$_[0].sxw|$xml_new/$_[0].sxw\n";
101*b1cdbd2cSJim Jagielski		}
102*b1cdbd2cSJim Jagielski	}
103*b1cdbd2cSJim Jagielski	elsif ($diff_type eq "pdb")
104*b1cdbd2cSJim Jagielski	{
105*b1cdbd2cSJim Jagielski		$cmd = "java -classpath $classpath_val SimplePdbCompare $pdb_orig/$_[0].pdb $pdb_new/$_[0].pdb\n";
106*b1cdbd2cSJim Jagielski		print "Executing: $cmd\n";
107*b1cdbd2cSJim Jagielski		$val = system($cmd)/256;
108*b1cdbd2cSJim Jagielski		if ($val == 2)
109*b1cdbd2cSJim Jagielski		{
110*b1cdbd2cSJim Jagielski			print LOGFILE "$_[0]|TRUE|$pdb_orig/$_[0].pdb|$pdb_new/$_[0].pdb\n";
111*b1cdbd2cSJim Jagielski		}
112*b1cdbd2cSJim Jagielski		elsif($val == 3)
113*b1cdbd2cSJim Jagielski		{
114*b1cdbd2cSJim Jagielski			print LOGFILE "$_[0]|FALSE|$pdb_orig/$_[0].pdb|$pdb_new/$_[0].pdb\n";
115*b1cdbd2cSJim Jagielski		}
116*b1cdbd2cSJim Jagielski		else
117*b1cdbd2cSJim Jagielski		{
118*b1cdbd2cSJim Jagielski			print LOGFILE "$_[0]|ERROR|$pdb_orig/$_[0].pdb|$pdb_new/$_[0].pdb\n";
119*b1cdbd2cSJim Jagielski		}
120*b1cdbd2cSJim Jagielski	}
121*b1cdbd2cSJim Jagielski	else
122*b1cdbd2cSJim Jagielski	{
123*b1cdbd2cSJim Jagielski		die "Don't understand test type of $diff_type.";
124*b1cdbd2cSJim Jagielski	}
125*b1cdbd2cSJim Jagielski}
126*b1cdbd2cSJim Jagielski
127*b1cdbd2cSJim Jagielskisub process_cmdline
128*b1cdbd2cSJim Jagielski{
129*b1cdbd2cSJim Jagielski	foreach $i (@_)
130*b1cdbd2cSJim Jagielski	{
131*b1cdbd2cSJim Jagielski		@arg= split('=', $i);
132*b1cdbd2cSJim Jagielski		@arg[0] =~ tr/A-Z/a-z/;
133*b1cdbd2cSJim Jagielski
134*b1cdbd2cSJim Jagielski		if (@arg[0] eq "-pdb-orig")
135*b1cdbd2cSJim Jagielski		{
136*b1cdbd2cSJim Jagielski			$pdb_orig=$arg[1];
137*b1cdbd2cSJim Jagielski		}
138*b1cdbd2cSJim Jagielski		elsif (@arg[0] eq "-pdb-new")
139*b1cdbd2cSJim Jagielski		{
140*b1cdbd2cSJim Jagielski			$pdb_new=$arg[1];
141*b1cdbd2cSJim Jagielski		}
142*b1cdbd2cSJim Jagielski		elsif (@arg[0] eq "-xml-orig")
143*b1cdbd2cSJim Jagielski		{
144*b1cdbd2cSJim Jagielski			$xml_orig=$arg[1];
145*b1cdbd2cSJim Jagielski		}
146*b1cdbd2cSJim Jagielski		elsif (@arg[0] eq "-xml-new")
147*b1cdbd2cSJim Jagielski		{
148*b1cdbd2cSJim Jagielski			$xml_new=$arg[1];
149*b1cdbd2cSJim Jagielski		}
150*b1cdbd2cSJim Jagielski		elsif (@arg[0] eq "-env")
151*b1cdbd2cSJim Jagielski		{
152*b1cdbd2cSJim Jagielski			set_env_from_props($arg[1]);
153*b1cdbd2cSJim Jagielski		}
154*b1cdbd2cSJim Jagielski		elsif (@arg[0] eq "-list")
155*b1cdbd2cSJim Jagielski		{
156*b1cdbd2cSJim Jagielski			$test_list = $arg[1];
157*b1cdbd2cSJim Jagielski		}
158*b1cdbd2cSJim Jagielski		elsif (@arg[0] eq "-one")
159*b1cdbd2cSJim Jagielski		{
160*b1cdbd2cSJim Jagielski			$infile = $arg[1];
161*b1cdbd2cSJim Jagielski		}
162*b1cdbd2cSJim Jagielski		elsif (@arg[0] eq "-type")
163*b1cdbd2cSJim Jagielski		{
164*b1cdbd2cSJim Jagielski			$diff_type = $arg[1];
165*b1cdbd2cSJim Jagielski			chomp $diff_type;
166*b1cdbd2cSJim Jagielski		}
167*b1cdbd2cSJim Jagielski		elsif (@arg[0] eq "-log")
168*b1cdbd2cSJim Jagielski		{
169*b1cdbd2cSJim Jagielski			$logfile = $arg[1];
170*b1cdbd2cSJim Jagielski		}
171*b1cdbd2cSJim Jagielski		else
172*b1cdbd2cSJim Jagielski		{
173*b1cdbd2cSJim Jagielski			print_usage();
174*b1cdbd2cSJim Jagielski			die "Incorrect command line. Don't understand $i";
175*b1cdbd2cSJim Jagielski		}
176*b1cdbd2cSJim Jagielski	}
177*b1cdbd2cSJim Jagielski}
178*b1cdbd2cSJim Jagielski
179*b1cdbd2cSJim Jagielskisub set_env_from_props
180*b1cdbd2cSJim Jagielski{
181*b1cdbd2cSJim Jagielski	open(PROPSFILE, $_[0]) || die "Could not open properties file";
182*b1cdbd2cSJim Jagielski
183*b1cdbd2cSJim Jagielski	while (<PROPSFILE>)
184*b1cdbd2cSJim Jagielski	{
185*b1cdbd2cSJim Jagielski		chomp $_;
186*b1cdbd2cSJim Jagielski		@arg = split('=', $_);
187*b1cdbd2cSJim Jagielski		@arg[0] =~ tr/a-z/A-Z/;
188*b1cdbd2cSJim Jagielski		$len = @arg;
189*b1cdbd2cSJim Jagielski		if ($len != 2)
190*b1cdbd2cSJim Jagielski		{
191*b1cdbd2cSJim Jagielski			die "Malformed property in $ARGV[0]";
192*b1cdbd2cSJim Jagielski		}
193*b1cdbd2cSJim Jagielski
194*b1cdbd2cSJim Jagielski		if (@arg[0] eq "PDB_ORIG")
195*b1cdbd2cSJim Jagielski		{
196*b1cdbd2cSJim Jagielski			$pdb_orig=$arg[1];
197*b1cdbd2cSJim Jagielski		}
198*b1cdbd2cSJim Jagielski		elsif (@arg[0] eq "PDB_NEW")
199*b1cdbd2cSJim Jagielski		{
200*b1cdbd2cSJim Jagielski			$pdb_new=$arg[1];
201*b1cdbd2cSJim Jagielski		}
202*b1cdbd2cSJim Jagielski		elsif (@arg[0] eq "XML_ORIG")
203*b1cdbd2cSJim Jagielski		{
204*b1cdbd2cSJim Jagielski			$xml_orig=$arg[1];
205*b1cdbd2cSJim Jagielski		}
206*b1cdbd2cSJim Jagielski		elsif (@arg[0] eq "XML_NEW")
207*b1cdbd2cSJim Jagielski		{
208*b1cdbd2cSJim Jagielski			$xml_new=$arg[1];
209*b1cdbd2cSJim Jagielski		}
210*b1cdbd2cSJim Jagielski
211*b1cdbd2cSJim Jagielski	}
212*b1cdbd2cSJim Jagielski	close PROPSFILE;
213*b1cdbd2cSJim Jagielski}
214*b1cdbd2cSJim Jagielski
215*b1cdbd2cSJim Jagielskisub print_usage
216*b1cdbd2cSJim Jagielski{
217*b1cdbd2cSJim Jagielski	print "Usage : compartor.pl - compare Office or pdb files\n";
218*b1cdbd2cSJim Jagielski	print "\t-one=<file> :\t\t individual test case file to run\n";
219*b1cdbd2cSJim Jagielski	print "\t-list=<file> :\t\t list of test case files\n";
220*b1cdbd2cSJim Jagielski	print "\t-env=<file> :\t\t Properites like file defining env\n";
221*b1cdbd2cSJim Jagielski	print "\t-pdb-orig=<path> :\t directory to hold original pdb files\n";
222*b1cdbd2cSJim Jagielski	print "\t-pdb-new=<path> :\t directory to hold new pdb files\n";
223*b1cdbd2cSJim Jagielski	print "\t-xml-orig=<path> :\t directory to hold original office documents\n";
224*b1cdbd2cSJim Jagielski	print "\t-xml-new=<path> :\t directory to hold new office documents\n";
225*b1cdbd2cSJim Jagielski	print "\t-type=<xml|pdb> :\t Invokes the merge option when converting\n";
226*b1cdbd2cSJim Jagielski	print "\t-log=<logfile> :\t Save results to logfile.\n";
227*b1cdbd2cSJim Jagielski}
228*b1cdbd2cSJim Jagielski
229*b1cdbd2cSJim Jagielskisub print_env
230*b1cdbd2cSJim Jagielski{
231*b1cdbd2cSJim Jagielski	print "Using the following environment:\n";
232*b1cdbd2cSJim Jagielski	print "\tPDB_ORIG  = $pdb_orig\n";
233*b1cdbd2cSJim Jagielski	print "\tPDB_NEW   = $pdb_new\n";
234*b1cdbd2cSJim Jagielski	print "\tXML_ORIG  = $xml_orig\n";
235*b1cdbd2cSJim Jagielski	print "\tXML_NEW   = $xml_new\n\n";
236*b1cdbd2cSJim Jagielski}
237*b1cdbd2cSJim Jagielski
238*b1cdbd2cSJim Jagielskisub get_file_title
239*b1cdbd2cSJim Jagielski{
240*b1cdbd2cSJim Jagielski	@paths = split('\/', $_[0]);
241*b1cdbd2cSJim Jagielski	$len = @paths;
242*b1cdbd2cSJim Jagielski	@names = split('\.', @paths[$len-1]);
243*b1cdbd2cSJim Jagielski	return $names[0];
244*b1cdbd2cSJim Jagielski}
245