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