1*b1cdbd2cSJim Jagielskipackage graphical_compare; 2*b1cdbd2cSJim Jagielski 3*b1cdbd2cSJim Jagielski#************************************************************** 4*b1cdbd2cSJim Jagielski# 5*b1cdbd2cSJim Jagielski# Licensed to the Apache Software Foundation (ASF) under one 6*b1cdbd2cSJim Jagielski# or more contributor license agreements. See the NOTICE file 7*b1cdbd2cSJim Jagielski# distributed with this work for additional information 8*b1cdbd2cSJim Jagielski# regarding copyright ownership. The ASF licenses this file 9*b1cdbd2cSJim Jagielski# to you under the Apache License, Version 2.0 (the 10*b1cdbd2cSJim Jagielski# "License"); you may not use this file except in compliance 11*b1cdbd2cSJim Jagielski# with the License. You may obtain a copy of the License at 12*b1cdbd2cSJim Jagielski# 13*b1cdbd2cSJim Jagielski# http://www.apache.org/licenses/LICENSE-2.0 14*b1cdbd2cSJim Jagielski# 15*b1cdbd2cSJim Jagielski# Unless required by applicable law or agreed to in writing, 16*b1cdbd2cSJim Jagielski# software distributed under the License is distributed on an 17*b1cdbd2cSJim Jagielski# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 18*b1cdbd2cSJim Jagielski# KIND, either express or implied. See the License for the 19*b1cdbd2cSJim Jagielski# specific language governing permissions and limitations 20*b1cdbd2cSJim Jagielski# under the License. 21*b1cdbd2cSJim Jagielski# 22*b1cdbd2cSJim Jagielski#************************************************************** 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielskiuse CallExternals; 27*b1cdbd2cSJim Jagielskiuse stringhelper; 28*b1cdbd2cSJim Jagielskiuse timehelper; 29*b1cdbd2cSJim Jagielskiuse filehelper; 30*b1cdbd2cSJim Jagielskiuse loghelper; 31*b1cdbd2cSJim Jagielskiuse oshelper; 32*b1cdbd2cSJim Jagielskiuse cwstestresulthelper; 33*b1cdbd2cSJim Jagielskiuse solarenvhelper; 34*b1cdbd2cSJim Jagielskiuse ConvwatchHelper; 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielskiuse strict; 37*b1cdbd2cSJim Jagielskiuse Cwd; 38*b1cdbd2cSJim Jagielski# use File::Basename; 39*b1cdbd2cSJim Jagielskiuse Getopt::Long; 40*b1cdbd2cSJim Jagielskiuse English; # $OSNAME, ... 41*b1cdbd2cSJim Jagielskiuse File::Path; 42*b1cdbd2cSJim Jagielskiuse Cwd 'chdir'; 43*b1cdbd2cSJim Jagielskiuse Sys::Hostname; 44*b1cdbd2cSJim Jagielskiuse Time::localtime; 45*b1cdbd2cSJim Jagielski 46*b1cdbd2cSJim Jagielski# my $cwd = getcwd(); 47*b1cdbd2cSJim Jagielski 48*b1cdbd2cSJim JagielskiBEGIN { 49*b1cdbd2cSJim Jagielski use Exporter (); 50*b1cdbd2cSJim Jagielski our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); 51*b1cdbd2cSJim Jagielski 52*b1cdbd2cSJim Jagielski $VERSION = 1.00; 53*b1cdbd2cSJim Jagielski # if using RCS/CVS, this may be preferred 54*b1cdbd2cSJim Jagielski $VERSION = do { my @r = (q$Revision: 1.2 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker 55*b1cdbd2cSJim Jagielski @ISA = qw(Exporter); 56*b1cdbd2cSJim Jagielski @EXPORT = qw(&SingleDocumentCompare &setPrefix &setConnectionString); 57*b1cdbd2cSJim Jagielski %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], 58*b1cdbd2cSJim Jagielski # your exported package globals go here, 59*b1cdbd2cSJim Jagielski # as well as any optionally exported functions 60*b1cdbd2cSJim Jagielski @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); 61*b1cdbd2cSJim Jagielski} 62*b1cdbd2cSJim Jagielski 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielskiour $nTimeOut = 300 * 1000; 65*b1cdbd2cSJim Jagielskiour $viewable = 1; 66*b1cdbd2cSJim Jagielskiour $port; 67*b1cdbd2cSJim Jagielskiour $resolution; 68*b1cdbd2cSJim Jagielskiour $overwritereference; 69*b1cdbd2cSJim Jagielskiour $fixreference; 70*b1cdbd2cSJim Jagielskiour $sConncectionString; 71*b1cdbd2cSJim Jagielski 72*b1cdbd2cSJim Jagielskisub setConnectionString($) 73*b1cdbd2cSJim Jagielski{ 74*b1cdbd2cSJim Jagielski $sConncectionString=shift; 75*b1cdbd2cSJim Jagielski} 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielskisub getOOoRunnerClasspath() 78*b1cdbd2cSJim Jagielski{ 79*b1cdbd2cSJim Jagielski my $sSourceRoot; 80*b1cdbd2cSJim Jagielski my $sUPDExtensions = ""; 81*b1cdbd2cSJim Jagielski if (defined ($ENV{SOL_TMP}) && defined ($ENV{SOLARVERSION})) 82*b1cdbd2cSJim Jagielski { 83*b1cdbd2cSJim Jagielski $sSourceRoot = $ENV{SOLARVERSION}; 84*b1cdbd2cSJim Jagielski } 85*b1cdbd2cSJim Jagielski elsif (defined $ENV{SOURCE_ROOT}) 86*b1cdbd2cSJim Jagielski { 87*b1cdbd2cSJim Jagielski $sSourceRoot = $ENV{SOURCE_ROOT}; 88*b1cdbd2cSJim Jagielski $sSourceRoot = appendPath($sSourceRoot, $ENV{WORK_STAMP}); 89*b1cdbd2cSJim Jagielski } 90*b1cdbd2cSJim Jagielski else 91*b1cdbd2cSJim Jagielski { 92*b1cdbd2cSJim Jagielski $sSourceRoot = $ENV{SOLARVERSION}; 93*b1cdbd2cSJim Jagielski $sUPDExtensions = ".$ENV{UPDMINOR}"; 94*b1cdbd2cSJim Jagielski } 95*b1cdbd2cSJim Jagielski $sSourceRoot = appendPath($sSourceRoot, $ENV{INPATH}); 96*b1cdbd2cSJim Jagielski my $sSourceRootBin = appendPath($sSourceRoot, "bin" . $sUPDExtensions); 97*b1cdbd2cSJim Jagielski my $sSourceRootLib = appendPath($sSourceRoot, "lib" . $sUPDExtensions); 98*b1cdbd2cSJim Jagielski 99*b1cdbd2cSJim Jagielski if (! -d $sSourceRoot ) 100*b1cdbd2cSJim Jagielski { 101*b1cdbd2cSJim Jagielski log_print( "SourceRoot not found, search it in '$sSourceRoot'\n"); 102*b1cdbd2cSJim Jagielski return ""; 103*b1cdbd2cSJim Jagielski } 104*b1cdbd2cSJim Jagielski 105*b1cdbd2cSJim Jagielski my $sOOoRunnerPath = $sSourceRootBin; 106*b1cdbd2cSJim Jagielski my $sUnoilPath = $sSourceRootBin; 107*b1cdbd2cSJim Jagielski my $sRidlPath = $sSourceRootBin; 108*b1cdbd2cSJim Jagielski my $sJurtPath = $sSourceRootBin; 109*b1cdbd2cSJim Jagielski my $sJuhPath = $sSourceRootBin; 110*b1cdbd2cSJim Jagielski my $sJavaUnoPath = $sSourceRootBin; 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski my $sOOoRunnerClasspath = 113*b1cdbd2cSJim Jagielski appendPath( $sRidlPath, "ridl.jar") . getJavaPathSeparator() . 114*b1cdbd2cSJim Jagielski appendPath( $sUnoilPath, "unoil.jar") . getJavaPathSeparator() . 115*b1cdbd2cSJim Jagielski appendPath( $sJurtPath, "jurt.jar") . getJavaPathSeparator() . 116*b1cdbd2cSJim Jagielski appendPath( $sJuhPath, "juh.jar") . getJavaPathSeparator() . 117*b1cdbd2cSJim Jagielski appendPath( $sJavaUnoPath, "java_uno.jar") . getJavaPathSeparator() . 118*b1cdbd2cSJim Jagielski appendPath( $sOOoRunnerPath, "OOoRunnerLight.jar"); 119*b1cdbd2cSJim Jagielski if (isWindowsEnvironment()) 120*b1cdbd2cSJim Jagielski { 121*b1cdbd2cSJim Jagielski $sOOoRunnerClasspath .= getJavaPathSeparator() . $sSourceRootBin; 122*b1cdbd2cSJim Jagielski } 123*b1cdbd2cSJim Jagielski else 124*b1cdbd2cSJim Jagielski { 125*b1cdbd2cSJim Jagielski $sOOoRunnerClasspath .= getJavaPathSeparator() . $sSourceRootLib; 126*b1cdbd2cSJim Jagielski } 127*b1cdbd2cSJim Jagielski return $sOOoRunnerClasspath; 128*b1cdbd2cSJim Jagielski} 129*b1cdbd2cSJim Jagielski 130*b1cdbd2cSJim Jagielski# ------------------------------------------------------------------------------ 131*b1cdbd2cSJim Jagielskisub getTempPath() 132*b1cdbd2cSJim Jagielski{ 133*b1cdbd2cSJim Jagielski my $sTempPath; 134*b1cdbd2cSJim Jagielski if (isWindowsEnvironment()) 135*b1cdbd2cSJim Jagielski { 136*b1cdbd2cSJim Jagielski $sTempPath = "C:/temp"; 137*b1cdbd2cSJim Jagielski } 138*b1cdbd2cSJim Jagielski elsif (isUnixEnvironment()) 139*b1cdbd2cSJim Jagielski { 140*b1cdbd2cSJim Jagielski $sTempPath = "/tmp"; 141*b1cdbd2cSJim Jagielski } 142*b1cdbd2cSJim Jagielski else 143*b1cdbd2cSJim Jagielski { 144*b1cdbd2cSJim Jagielski die "getTempPath() Failed, due to unsupported environment.\n"; 145*b1cdbd2cSJim Jagielski } 146*b1cdbd2cSJim Jagielski return $sTempPath; 147*b1cdbd2cSJim Jagielski} 148*b1cdbd2cSJim Jagielski# ------------------------------------------------------------------------------ 149*b1cdbd2cSJim Jagielski 150*b1cdbd2cSJim Jagielskisub getProjectOutput() 151*b1cdbd2cSJim Jagielski{ 152*b1cdbd2cSJim Jagielski my $sOutput = appendPath(getProjectRoot(), $ENV{INPATH}); 153*b1cdbd2cSJim Jagielski $sOutput = appendPath($sOutput, "misc"); 154*b1cdbd2cSJim Jagielski return $sOutput; 155*b1cdbd2cSJim Jagielski} 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski# ------------------------------------------------------------------------------ 158*b1cdbd2cSJim Jagielskisub getProjectOutputReference() 159*b1cdbd2cSJim Jagielski{ 160*b1cdbd2cSJim Jagielski my $sOutput = appendPath(getProjectRoot(), $ENV{INPATH}); 161*b1cdbd2cSJim Jagielski $sOutput = appendPath($sOutput, "reference"); 162*b1cdbd2cSJim Jagielski return $sOutput; 163*b1cdbd2cSJim Jagielski} 164*b1cdbd2cSJim Jagielski 165*b1cdbd2cSJim Jagielski 166*b1cdbd2cSJim Jagielskisub searchForReference($) 167*b1cdbd2cSJim Jagielski{ 168*b1cdbd2cSJim Jagielski my $sFile = shift; 169*b1cdbd2cSJim Jagielski if ( -e $sFile ) 170*b1cdbd2cSJim Jagielski { 171*b1cdbd2cSJim Jagielski return 0; 172*b1cdbd2cSJim Jagielski } 173*b1cdbd2cSJim Jagielski if ( -e $sFile . ".ps") 174*b1cdbd2cSJim Jagielski { 175*b1cdbd2cSJim Jagielski return 0; 176*b1cdbd2cSJim Jagielski } 177*b1cdbd2cSJim Jagielski if ( -e $sFile . ".pdf") 178*b1cdbd2cSJim Jagielski { 179*b1cdbd2cSJim Jagielski return 0; 180*b1cdbd2cSJim Jagielski } 181*b1cdbd2cSJim Jagielski return 1; 182*b1cdbd2cSJim Jagielski} 183*b1cdbd2cSJim Jagielski# ------------------------------------------------------------------------------ 184*b1cdbd2cSJim Jagielski 185*b1cdbd2cSJim Jagielski# my $sOfficeName = $officeprefixname . $officename; 186*b1cdbd2cSJim Jagielskisub SingleDocumentCompare($$$$$$) 187*b1cdbd2cSJim Jagielski{ 188*b1cdbd2cSJim Jagielski # get all about the document to compare 189*b1cdbd2cSJim Jagielski my $sDocumentPoolPath = shift; 190*b1cdbd2cSJim Jagielski my $sDocumentPool = shift; 191*b1cdbd2cSJim Jagielski my $sDocumentName = shift; 192*b1cdbd2cSJim Jagielski my $sDebug = ""; 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski # get all about the destination office 195*b1cdbd2cSJim Jagielski my $sCreatorType = shift; 196*b1cdbd2cSJim Jagielski if (! $sCreatorType) 197*b1cdbd2cSJim Jagielski { 198*b1cdbd2cSJim Jagielski # log_print( "parameter -creatortype not given. Use 'OOo'\n"); 199*b1cdbd2cSJim Jagielski $sCreatorType = "ps"; 200*b1cdbd2cSJim Jagielski } 201*b1cdbd2cSJim Jagielski my $prepareonly = shift; 202*b1cdbd2cSJim Jagielski my $show = shift; 203*b1cdbd2cSJim Jagielski 204*b1cdbd2cSJim Jagielski # my $nSimpleCompareTime = getTime(); 205*b1cdbd2cSJim Jagielski 206*b1cdbd2cSJim Jagielski my $nConvwatchFailed = 0; 207*b1cdbd2cSJim Jagielski set_logfile( appendPath(getProjectOutput(), $sDocumentName . ".txt" )); 208*b1cdbd2cSJim Jagielski 209*b1cdbd2cSJim Jagielski print("$sDocumentName"); 210*b1cdbd2cSJim Jagielski log_print("\n"); 211*b1cdbd2cSJim Jagielski log_print("Graphical compare on document: '$sDocumentName'\n"); 212*b1cdbd2cSJim Jagielski # ------------------------------------------------------------------------------ 213*b1cdbd2cSJim Jagielski # create postscript or pdf from first installed office 214*b1cdbd2cSJim Jagielski # ------------------------------------------------------------------------------ 215*b1cdbd2cSJim Jagielski 216*b1cdbd2cSJim Jagielski my $sOOoRunnerClasspath = quoteIfNeed(getOOoRunnerClasspath()); 217*b1cdbd2cSJim Jagielski if ($OSNAME eq "cygwin") 218*b1cdbd2cSJim Jagielski { 219*b1cdbd2cSJim Jagielski if (!startswith($sOOoRunnerClasspath, "\"")) 220*b1cdbd2cSJim Jagielski { 221*b1cdbd2cSJim Jagielski $sOOoRunnerClasspath = quote($sOOoRunnerClasspath); 222*b1cdbd2cSJim Jagielski } 223*b1cdbd2cSJim Jagielski } 224*b1cdbd2cSJim Jagielski if (length($sOOoRunnerClasspath) == 0) 225*b1cdbd2cSJim Jagielski { 226*b1cdbd2cSJim Jagielski $nConvwatchFailed == 1; 227*b1cdbd2cSJim Jagielski } 228*b1cdbd2cSJim Jagielski # ------------------------------------------------------------------------------ 229*b1cdbd2cSJim Jagielski # create postscript or pdf from second installed office 230*b1cdbd2cSJim Jagielski # ------------------------------------------------------------------------------ 231*b1cdbd2cSJim Jagielski 232*b1cdbd2cSJim Jagielski my $sPathesIni = appendPath(getProjectOutput(), "pathes.ini"); 233*b1cdbd2cSJim Jagielski my $gspath = getFromPathes($sPathesIni, "gs.path"); 234*b1cdbd2cSJim Jagielski my $gsexe = getFromPathes($sPathesIni, "gs.exe"); 235*b1cdbd2cSJim Jagielski my $impath = getFromPathes($sPathesIni, "imagemagick.path"); 236*b1cdbd2cSJim Jagielski my $javaexe = getFromPathes($sPathesIni, "java.exe"); 237*b1cdbd2cSJim Jagielski setJavaExecutable($javaexe); 238*b1cdbd2cSJim Jagielski 239*b1cdbd2cSJim Jagielski log_print("----- CREATE POSTSCRIPT OR PDF WITH RUNNING OFFICE -----\n"); 240*b1cdbd2cSJim Jagielski # my $nPrepareSecondPostscriptTime = getTime(); 241*b1cdbd2cSJim Jagielski if ($nConvwatchFailed == 0) 242*b1cdbd2cSJim Jagielski { 243*b1cdbd2cSJim Jagielski my $sInputPath = $sDocumentPoolPath; 244*b1cdbd2cSJim Jagielski $sInputPath = appendPath($sInputPath, $sDocumentPool); 245*b1cdbd2cSJim Jagielski $sInputPath = appendPath($sInputPath, $sDocumentName); 246*b1cdbd2cSJim Jagielski 247*b1cdbd2cSJim Jagielski if (! -f $sInputPath ) 248*b1cdbd2cSJim Jagielski { 249*b1cdbd2cSJim Jagielski $nConvwatchFailed = 1; 250*b1cdbd2cSJim Jagielski log_print("ERROR: File '$sInputPath' doesn't exists.\n"); 251*b1cdbd2cSJim Jagielski } 252*b1cdbd2cSJim Jagielski else 253*b1cdbd2cSJim Jagielski { 254*b1cdbd2cSJim Jagielski my $sOutputPath = getProjectOutput(); 255*b1cdbd2cSJim Jagielski my $sPropertyFile = appendPath(getProjectOutput() , $sDocumentName . ".build.props"); 256*b1cdbd2cSJim Jagielski 257*b1cdbd2cSJim Jagielski local *PROPERTYFILE; 258*b1cdbd2cSJim Jagielski if (open(PROPERTYFILE, ">$sPropertyFile")) 259*b1cdbd2cSJim Jagielski { 260*b1cdbd2cSJim Jagielski print PROPERTYFILE "# This file is automatically created by graphical_compare.pl\n"; 261*b1cdbd2cSJim Jagielski print PROPERTYFILE "DOC_COMPARATOR_PRINT_MAX_PAGE=9999\n"; 262*b1cdbd2cSJim Jagielski print PROPERTYFILE "DOC_COMPARATOR_GFX_OUTPUT_DPI_RESOLUTION=180\n"; 263*b1cdbd2cSJim Jagielski print PROPERTYFILE "DOC_COMPARATOR_REFERENCE_CREATOR_TYPE=$sCreatorType\n"; 264*b1cdbd2cSJim Jagielski print PROPERTYFILE "TEMPPATH=" . getTempPath() . "\n"; 265*b1cdbd2cSJim Jagielski if ($sConncectionString) 266*b1cdbd2cSJim Jagielski { 267*b1cdbd2cSJim Jagielski print PROPERTYFILE "ConnectionString=$sConncectionString\n"; 268*b1cdbd2cSJim Jagielski } 269*b1cdbd2cSJim Jagielski else 270*b1cdbd2cSJim Jagielski { 271*b1cdbd2cSJim Jagielski print PROPERTYFILE "ConnectionString=pipe,name=" . getUsername() . "\n"; 272*b1cdbd2cSJim Jagielski } 273*b1cdbd2cSJim Jagielski print PROPERTYFILE "OFFICE_VIEWABLE=true\n"; 274*b1cdbd2cSJim Jagielski print PROPERTYFILE "CREATE_DEFAULT_REFERENCE=true\n"; 275*b1cdbd2cSJim Jagielski print PROPERTYFILE "DOC_COMPARATOR_INPUT_PATH=$sInputPath\n"; 276*b1cdbd2cSJim Jagielski print PROPERTYFILE "DOC_COMPARATOR_OUTPUT_PATH=$sOutputPath\n"; 277*b1cdbd2cSJim Jagielski if (isWindowsEnvironment()) 278*b1cdbd2cSJim Jagielski { 279*b1cdbd2cSJim Jagielski print PROPERTYFILE "DOC_COMPARATOR_PRINTER_NAME=CrossOffice Generic Printer\n"; 280*b1cdbd2cSJim Jagielski } 281*b1cdbd2cSJim Jagielski print PROPERTYFILE "NoOffice=true\n"; 282*b1cdbd2cSJim Jagielski 283*b1cdbd2cSJim Jagielski close(PROPERTYFILE); 284*b1cdbd2cSJim Jagielski } 285*b1cdbd2cSJim Jagielski else 286*b1cdbd2cSJim Jagielski { 287*b1cdbd2cSJim Jagielski print "Can't open '$sPropertyFile' for write.\n"; 288*b1cdbd2cSJim Jagielski } 289*b1cdbd2cSJim Jagielski if ( -e "$sPropertyFile") 290*b1cdbd2cSJim Jagielski { 291*b1cdbd2cSJim Jagielski # start OOoRunner 292*b1cdbd2cSJim Jagielski # sleep 10; 293*b1cdbd2cSJim Jagielski # $sOOoRunnerClasspathFromDestinationName = quoteIfNeed(getOOoRunnerClasspath()); 294*b1cdbd2cSJim Jagielski my $sParams; 295*b1cdbd2cSJim Jagielski if ( $ENV{PERL} ) 296*b1cdbd2cSJim Jagielski { 297*b1cdbd2cSJim Jagielski $sParams = "-Dperl.exe=" . convertCygwinPath($ENV{PERL}); 298*b1cdbd2cSJim Jagielski } 299*b1cdbd2cSJim Jagielski 300*b1cdbd2cSJim Jagielski $sParams .= " -cp " . $sOOoRunnerClasspath . 301*b1cdbd2cSJim Jagielski " org.openoffice.Runner" . 302*b1cdbd2cSJim Jagielski " -TimeOut $nTimeOut" . 303*b1cdbd2cSJim Jagielski " -tb java_complex" . 304*b1cdbd2cSJim Jagielski " -ini $sPropertyFile" . 305*b1cdbd2cSJim Jagielski " -o graphical.PostscriptCreator"; 306*b1cdbd2cSJim Jagielski # $sParams .= " -cs pipe,name=$USER"; 307*b1cdbd2cSJim Jagielski 308*b1cdbd2cSJim Jagielski # $sDebug = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9001,suspend=y"; 309*b1cdbd2cSJim Jagielski my $err = calljava(getJavaExecutable(), $sParams, $sDebug); 310*b1cdbd2cSJim Jagielski $sDebug = ""; 311*b1cdbd2cSJim Jagielski log_print( "\n\n"); 312*b1cdbd2cSJim Jagielski if ($err != 0) 313*b1cdbd2cSJim Jagielski { 314*b1cdbd2cSJim Jagielski my $sFailure = "Failed after try to create Postscript/pdf document for " . $sDocumentName; 315*b1cdbd2cSJim Jagielski log_print("ERROR: $sFailure\n"); 316*b1cdbd2cSJim Jagielski $nConvwatchFailed = 1; 317*b1cdbd2cSJim Jagielski } 318*b1cdbd2cSJim Jagielski } 319*b1cdbd2cSJim Jagielski else 320*b1cdbd2cSJim Jagielski { 321*b1cdbd2cSJim Jagielski my $sFailure = "There is no propertyfile: $sPropertyFile"; 322*b1cdbd2cSJim Jagielski log_print( "ERROR: $sFailure\n"); 323*b1cdbd2cSJim Jagielski $nConvwatchFailed=1; 324*b1cdbd2cSJim Jagielski } 325*b1cdbd2cSJim Jagielski } 326*b1cdbd2cSJim Jagielski 327*b1cdbd2cSJim Jagielski # set prepareonly and it is possible to only create ps or pdf files 328*b1cdbd2cSJim Jagielski if ($prepareonly) 329*b1cdbd2cSJim Jagielski { 330*b1cdbd2cSJim Jagielski print(" [only create "); 331*b1cdbd2cSJim Jagielski if ($sCreatorType eq "ps" || $sCreatorType eq "pdf") 332*b1cdbd2cSJim Jagielski { 333*b1cdbd2cSJim Jagielski print(" $sCreatorType"); 334*b1cdbd2cSJim Jagielski } 335*b1cdbd2cSJim Jagielski else 336*b1cdbd2cSJim Jagielski { 337*b1cdbd2cSJim Jagielski print(" (${sCreatorType}?)"); 338*b1cdbd2cSJim Jagielski } 339*b1cdbd2cSJim Jagielski if ($nConvwatchFailed == 0) 340*b1cdbd2cSJim Jagielski { 341*b1cdbd2cSJim Jagielski print(" ok"); 342*b1cdbd2cSJim Jagielski } 343*b1cdbd2cSJim Jagielski else 344*b1cdbd2cSJim Jagielski { 345*b1cdbd2cSJim Jagielski print(" failed") 346*b1cdbd2cSJim Jagielski } 347*b1cdbd2cSJim Jagielski print("]\n"); 348*b1cdbd2cSJim Jagielski return $nConvwatchFailed; 349*b1cdbd2cSJim Jagielski } 350*b1cdbd2cSJim Jagielski 351*b1cdbd2cSJim Jagielski 352*b1cdbd2cSJim Jagielski # ------------------------------------------------------------------------------ 353*b1cdbd2cSJim Jagielski # create jpeg from postscript or pdf from second installed office 354*b1cdbd2cSJim Jagielski # ------------------------------------------------------------------------------ 355*b1cdbd2cSJim Jagielski 356*b1cdbd2cSJim Jagielski if ($nConvwatchFailed == 0) 357*b1cdbd2cSJim Jagielski { 358*b1cdbd2cSJim Jagielski log_print("----- CREATE JPEG FROM POSTSCRIPT OR PDF FROM RUNNING OFFICE -----\n"); 359*b1cdbd2cSJim Jagielski # start OOoRunner 360*b1cdbd2cSJim Jagielski my $sInputPath = getProjectOutput(); 361*b1cdbd2cSJim Jagielski $sInputPath = appendPath($sInputPath, $sDocumentName); 362*b1cdbd2cSJim Jagielski 363*b1cdbd2cSJim Jagielski my $sOutputPath = getProjectOutput(); 364*b1cdbd2cSJim Jagielski 365*b1cdbd2cSJim Jagielski my $sParams = "-cp " . $sOOoRunnerClasspath . 366*b1cdbd2cSJim Jagielski " org.openoffice.Runner" . 367*b1cdbd2cSJim Jagielski " -TimeOut $nTimeOut" . 368*b1cdbd2cSJim Jagielski " -tb java_complex" . 369*b1cdbd2cSJim Jagielski " -DOC_COMPARATOR_INPUT_PATH " . quoteIfNeed($sInputPath) . 370*b1cdbd2cSJim Jagielski " -DOC_COMPARATOR_OUTPUT_PATH " . quoteIfNeed($sOutputPath) . 371*b1cdbd2cSJim Jagielski " -DOC_COMPARATOR_REFERENCE_CREATOR_TYPE $sCreatorType" . 372*b1cdbd2cSJim Jagielski " -NoOffice" . 373*b1cdbd2cSJim Jagielski " -NoSmallPictures" . 374*b1cdbd2cSJim Jagielski " -o graphical.JPEGCreator"; 375*b1cdbd2cSJim Jagielski if ($gspath) 376*b1cdbd2cSJim Jagielski { 377*b1cdbd2cSJim Jagielski $sParams .= " -gs.path " . quoteIfNeed($gspath); 378*b1cdbd2cSJim Jagielski } 379*b1cdbd2cSJim Jagielski if ($gsexe) 380*b1cdbd2cSJim Jagielski { 381*b1cdbd2cSJim Jagielski $sParams .= " -gs.exe $gsexe"; 382*b1cdbd2cSJim Jagielski } 383*b1cdbd2cSJim Jagielski 384*b1cdbd2cSJim Jagielski # $sDebug = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9001,suspend=y"; 385*b1cdbd2cSJim Jagielski my $err = calljava(getJavaExecutable(), $sParams, $sDebug); 386*b1cdbd2cSJim Jagielski $sDebug = ""; 387*b1cdbd2cSJim Jagielski # log_print( "\n\n"); 388*b1cdbd2cSJim Jagielski if ($err != 0) 389*b1cdbd2cSJim Jagielski { 390*b1cdbd2cSJim Jagielski my $sFailure = "Failed after try to create JPEG from Postscript/pdf document for " . $sDocumentName; 391*b1cdbd2cSJim Jagielski log_print("ERROR: $sFailure\n"); 392*b1cdbd2cSJim Jagielski $nConvwatchFailed = 1; 393*b1cdbd2cSJim Jagielski } 394*b1cdbd2cSJim Jagielski } 395*b1cdbd2cSJim Jagielski } 396*b1cdbd2cSJim Jagielski 397*b1cdbd2cSJim Jagielski # ------------------------------------------------------------------------------ 398*b1cdbd2cSJim Jagielski # create jpeg from postscript or pdf from references 399*b1cdbd2cSJim Jagielski # ------------------------------------------------------------------------------ 400*b1cdbd2cSJim Jagielski 401*b1cdbd2cSJim Jagielski if ($nConvwatchFailed == 0) 402*b1cdbd2cSJim Jagielski { 403*b1cdbd2cSJim Jagielski log_print("----- CREATE JPEG FROM POSTSCRIPT OR PDF FROM REFERENCE -----\n"); 404*b1cdbd2cSJim Jagielski 405*b1cdbd2cSJim Jagielski # start OOoRunner 406*b1cdbd2cSJim Jagielski my $sInputPath = appendPath(getProjectRoot(), "references"); 407*b1cdbd2cSJim Jagielski $sInputPath = appendPath($sInputPath, getEnvironment()); 408*b1cdbd2cSJim Jagielski $sInputPath = appendPath($sInputPath, $sDocumentPool); 409*b1cdbd2cSJim Jagielski $sInputPath = appendPath($sInputPath, $sDocumentName); 410*b1cdbd2cSJim Jagielski 411*b1cdbd2cSJim Jagielski my $err = searchForReference($sInputPath); 412*b1cdbd2cSJim Jagielski if ($err != 0) 413*b1cdbd2cSJim Jagielski { 414*b1cdbd2cSJim Jagielski log_print("ERROR: Can't find Postscript or PDF reference for '$sInputPath'\n"); 415*b1cdbd2cSJim Jagielski $nConvwatchFailed = 1; 416*b1cdbd2cSJim Jagielski } 417*b1cdbd2cSJim Jagielski else 418*b1cdbd2cSJim Jagielski { 419*b1cdbd2cSJim Jagielski my $sOutputPath = getProjectOutputReference(); 420*b1cdbd2cSJim Jagielski rmkdir $sOutputPath; 421*b1cdbd2cSJim Jagielski 422*b1cdbd2cSJim Jagielski my $sIndexFile = appendPath($sOutputPath, "index.ini"); 423*b1cdbd2cSJim Jagielski # we need the index.ini for better run through 424*b1cdbd2cSJim Jagielski local *INDEXINI; 425*b1cdbd2cSJim Jagielski if ( ! -e $sIndexFile) 426*b1cdbd2cSJim Jagielski { 427*b1cdbd2cSJim Jagielski if (open(INDEXINI, ">$sIndexFile")) 428*b1cdbd2cSJim Jagielski { 429*b1cdbd2cSJim Jagielski # print INDEXINI "[$sDocumentName]\n"; 430*b1cdbd2cSJim Jagielski close(INDEXINI); 431*b1cdbd2cSJim Jagielski } 432*b1cdbd2cSJim Jagielski } 433*b1cdbd2cSJim Jagielski my $sParams = "-cp " . $sOOoRunnerClasspath . 434*b1cdbd2cSJim Jagielski " org.openoffice.Runner" . 435*b1cdbd2cSJim Jagielski " -TimeOut $nTimeOut" . 436*b1cdbd2cSJim Jagielski " -tb java_complex" . 437*b1cdbd2cSJim Jagielski " -DOC_COMPARATOR_INPUT_PATH " . quoteIfNeed($sInputPath) . 438*b1cdbd2cSJim Jagielski " -DOC_COMPARATOR_OUTPUT_PATH " . quoteIfNeed($sOutputPath) . 439*b1cdbd2cSJim Jagielski " -DOC_COMPARATOR_REFERENCE_CREATOR_TYPE $sCreatorType" . 440*b1cdbd2cSJim Jagielski " -NoOffice" . 441*b1cdbd2cSJim Jagielski " -NoSmallPictures" . 442*b1cdbd2cSJim Jagielski " -o graphical.JPEGCreator"; 443*b1cdbd2cSJim Jagielski if ($gspath) 444*b1cdbd2cSJim Jagielski { 445*b1cdbd2cSJim Jagielski $sParams .= " -gs.path " . quoteIfNeed($gspath); 446*b1cdbd2cSJim Jagielski } 447*b1cdbd2cSJim Jagielski if ($gsexe) 448*b1cdbd2cSJim Jagielski { 449*b1cdbd2cSJim Jagielski $sParams .= " -gs.exe $gsexe"; 450*b1cdbd2cSJim Jagielski } 451*b1cdbd2cSJim Jagielski 452*b1cdbd2cSJim Jagielski # $sDebug = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9001,suspend=y"; 453*b1cdbd2cSJim Jagielski my $err = calljava(getJavaExecutable(), $sParams, $sDebug); 454*b1cdbd2cSJim Jagielski $sDebug = ""; 455*b1cdbd2cSJim Jagielski # log_print( "\n\n"); 456*b1cdbd2cSJim Jagielski if ($err != 0) 457*b1cdbd2cSJim Jagielski { 458*b1cdbd2cSJim Jagielski my $sFailure = "Failed after try to create JPEG from Postscript/pdf document for references."; 459*b1cdbd2cSJim Jagielski log_print("ERROR: $sFailure\n"); 460*b1cdbd2cSJim Jagielski $nConvwatchFailed = 1; 461*b1cdbd2cSJim Jagielski } 462*b1cdbd2cSJim Jagielski } 463*b1cdbd2cSJim Jagielski } 464*b1cdbd2cSJim Jagielski # ------------------------------------------------------------------------------ 465*b1cdbd2cSJim Jagielski # compare JPEGs 466*b1cdbd2cSJim Jagielski # ------------------------------------------------------------------------------ 467*b1cdbd2cSJim Jagielski 468*b1cdbd2cSJim Jagielski if ($nConvwatchFailed == 0) 469*b1cdbd2cSJim Jagielski { 470*b1cdbd2cSJim Jagielski log_print("----- COMPARE JPEGS -----\n"); 471*b1cdbd2cSJim Jagielski my $sInputPath = appendPath(getProjectOutputReference(), $sDocumentName); 472*b1cdbd2cSJim Jagielski 473*b1cdbd2cSJim Jagielski my $sOutputPath = getProjectOutput(); 474*b1cdbd2cSJim Jagielski 475*b1cdbd2cSJim Jagielski my $sParams = "-Xmx512m" . 476*b1cdbd2cSJim Jagielski " -cp " . $sOOoRunnerClasspath . 477*b1cdbd2cSJim Jagielski " org.openoffice.Runner" . 478*b1cdbd2cSJim Jagielski " -TimeOut $nTimeOut" . 479*b1cdbd2cSJim Jagielski " -tb java_complex" . 480*b1cdbd2cSJim Jagielski " -DOC_COMPARATOR_INPUT_PATH " . quoteIfNeed($sInputPath) . 481*b1cdbd2cSJim Jagielski " -DOC_COMPARATOR_OUTPUT_PATH " . quoteIfNeed($sOutputPath) . 482*b1cdbd2cSJim Jagielski " -NoOffice" . 483*b1cdbd2cSJim Jagielski " -NoSmallPictures" . 484*b1cdbd2cSJim Jagielski " -o graphical.JPEGComparator"; 485*b1cdbd2cSJim Jagielski if ($impath) 486*b1cdbd2cSJim Jagielski { 487*b1cdbd2cSJim Jagielski $sParams .= " -imagemagick.path " . quoteIfNeed($impath); 488*b1cdbd2cSJim Jagielski } 489*b1cdbd2cSJim Jagielski 490*b1cdbd2cSJim Jagielski # start OOoRunner 491*b1cdbd2cSJim Jagielski # $sDebug = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9001,suspend=y"; 492*b1cdbd2cSJim Jagielski my $err = calljava(getJavaExecutable(), $sParams, $sDebug); 493*b1cdbd2cSJim Jagielski $sDebug = ""; 494*b1cdbd2cSJim Jagielski log_print( "\n\n"); 495*b1cdbd2cSJim Jagielski if ($err != 0) 496*b1cdbd2cSJim Jagielski { 497*b1cdbd2cSJim Jagielski my $sFailure = "Failed after compare JPEGs $sDocumentName\n"; 498*b1cdbd2cSJim Jagielski log_print("ERROR: $sFailure\n"); 499*b1cdbd2cSJim Jagielski $nConvwatchFailed = 1; 500*b1cdbd2cSJim Jagielski 501*b1cdbd2cSJim Jagielski if ($show) 502*b1cdbd2cSJim Jagielski { 503*b1cdbd2cSJim Jagielski # try to execute new java tool to show graphical compare 504*b1cdbd2cSJim Jagielski my $sJavaProgram = appendPath(getProjectRoot(), $ENV{INPATH}); 505*b1cdbd2cSJim Jagielski $sJavaProgram = appendPath($sJavaProgram, "class"); 506*b1cdbd2cSJim Jagielski $sJavaProgram = appendPath($sJavaProgram, "ConvwatchGUIProject.jar"); 507*b1cdbd2cSJim Jagielski if ( -e "$sJavaProgram") 508*b1cdbd2cSJim Jagielski { 509*b1cdbd2cSJim Jagielski my $sInputPath = appendPath(getProjectOutput(), $sDocumentName . ".ps.ini"); 510*b1cdbd2cSJim Jagielski if (! -e $sInputPath) 511*b1cdbd2cSJim Jagielski { 512*b1cdbd2cSJim Jagielski $sInputPath = appendPath(getProjectOutput(), $sDocumentName . ".pdf.ini"); 513*b1cdbd2cSJim Jagielski if (! -e $sInputPath) 514*b1cdbd2cSJim Jagielski { 515*b1cdbd2cSJim Jagielski $sInputPath = 0; 516*b1cdbd2cSJim Jagielski } 517*b1cdbd2cSJim Jagielski } 518*b1cdbd2cSJim Jagielski if ($sInputPath) 519*b1cdbd2cSJim Jagielski { 520*b1cdbd2cSJim Jagielski my $sParams = "-Xms128m -Xmx512m -jar $sJavaProgram $sInputPath"; 521*b1cdbd2cSJim Jagielski # $sParams .= " -cs pipe,name=$USER"; 522*b1cdbd2cSJim Jagielski # my $sJavaExe = "C:/Program Files/Java/jdk1.6.0_16/bin/java.exe"; # getJavaExecutable() 523*b1cdbd2cSJim Jagielski my $sJavaExe = getJavaExecutable(); 524*b1cdbd2cSJim Jagielski # $sDebug = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9001,suspend=y"; 525*b1cdbd2cSJim Jagielski my $err = calljava($sJavaExe, $sParams, $sDebug); 526*b1cdbd2cSJim Jagielski # $sDebug = ""; 527*b1cdbd2cSJim Jagielski # log_print( "\n\n"); 528*b1cdbd2cSJim Jagielski # if ($err != 0) 529*b1cdbd2cSJim Jagielski # { 530*b1cdbd2cSJim Jagielski # my $sFailure = "Failed after try to create Postscript/pdf document for " . $sDocumentName; 531*b1cdbd2cSJim Jagielski # log_print("ERROR: $sFailure\n"); 532*b1cdbd2cSJim Jagielski # $nConvwatchFailed = 1; 533*b1cdbd2cSJim Jagielski # } 534*b1cdbd2cSJim Jagielski } 535*b1cdbd2cSJim Jagielski } 536*b1cdbd2cSJim Jagielski else 537*b1cdbd2cSJim Jagielski { 538*b1cdbd2cSJim Jagielski print "WARNING: The show program '$sJavaProgram' doesn't exists.\n"; 539*b1cdbd2cSJim Jagielski } 540*b1cdbd2cSJim Jagielski } 541*b1cdbd2cSJim Jagielski } 542*b1cdbd2cSJim Jagielski } 543*b1cdbd2cSJim Jagielski 544*b1cdbd2cSJim Jagielski log_print( "\n\n"); 545*b1cdbd2cSJim Jagielski close_logfile(); 546*b1cdbd2cSJim Jagielski 547*b1cdbd2cSJim Jagielski if ($nConvwatchFailed == 0) 548*b1cdbd2cSJim Jagielski { 549*b1cdbd2cSJim Jagielski print(" [ok]\n"); 550*b1cdbd2cSJim Jagielski } 551*b1cdbd2cSJim Jagielski else 552*b1cdbd2cSJim Jagielski { 553*b1cdbd2cSJim Jagielski print(" [FAILED]\n"); 554*b1cdbd2cSJim Jagielski print("\nPrint output of test: $sDocumentName\n"); 555*b1cdbd2cSJim Jagielski my $sLogFile = appendPath(getProjectOutput(), $sDocumentName . ".txt"); 556*b1cdbd2cSJim Jagielski showFile($sLogFile); 557*b1cdbd2cSJim Jagielski } 558*b1cdbd2cSJim Jagielski # printTime(endTime($nSimpleCompareTime)); 559*b1cdbd2cSJim Jagielski 560*b1cdbd2cSJim Jagielski return $nConvwatchFailed; 561*b1cdbd2cSJim Jagielski} 562*b1cdbd2cSJim Jagielski 563*b1cdbd2cSJim Jagielski# ------------------------------------------------------------------------------ 564*b1cdbd2cSJim Jagielski# cat $file 565*b1cdbd2cSJim Jagielskisub showFile($) 566*b1cdbd2cSJim Jagielski{ 567*b1cdbd2cSJim Jagielski my $logfile = shift; 568*b1cdbd2cSJim Jagielski local *LOGFILE; 569*b1cdbd2cSJim Jagielski if (open(LOGFILE, "$logfile")) 570*b1cdbd2cSJim Jagielski { 571*b1cdbd2cSJim Jagielski my $line; 572*b1cdbd2cSJim Jagielski while ($line = <LOGFILE>) 573*b1cdbd2cSJim Jagielski { 574*b1cdbd2cSJim Jagielski chomp($line); 575*b1cdbd2cSJim Jagielski print $line ."\n"; 576*b1cdbd2cSJim Jagielski } 577*b1cdbd2cSJim Jagielski close(LOGFILE); 578*b1cdbd2cSJim Jagielski } 579*b1cdbd2cSJim Jagielski} 580*b1cdbd2cSJim Jagielski 581*b1cdbd2cSJim Jagielski 582*b1cdbd2cSJim Jagielski1; 583