diff options
73 files changed, 12105 insertions, 592 deletions
diff --git a/qadevOOo/runner/convwatch/OfficePrint.java b/qadevOOo/runner/convwatch/OfficePrint.java index 7f9b86f2f920..c9a656ac84b4 100644 --- a/qadevOOo/runner/convwatch/OfficePrint.java +++ b/qadevOOo/runner/convwatch/OfficePrint.java @@ -49,10 +49,10 @@ import com.sun.star.uno.AnyConverter; import helper.URLHelper; import helper.PropertyHelper; import helper.OSHelper; -import convwatch.FileHelper; -import convwatch.MSOfficePrint; -import convwatch.GraphicalTestArguments; -import convwatch.ConvWatchCancelException; +// import convwatch.FileHelper; +// import convwatch.MSOfficePrint; +// import convwatch.GraphicalTestArguments; +// import convwatch.ConvWatchCancelException; // import helper.Parameter; @@ -118,7 +118,7 @@ public class OfficePrint { */ static String getDocumentType( XComponent _aDoc ) { - XModel xModel = (XModel) UnoRuntime.queryInterface( XModel.class, _aDoc); + XModel xModel = UnoRuntime.queryInterface( XModel.class, _aDoc); PropertyValue[] aArgs = xModel.getArgs(); for (int i=0;i<aArgs.length;i++) { @@ -145,6 +145,9 @@ public class OfficePrint { * the GraphicalTestArguments must contain a living MultiServiceFactory object * or we crash here. * Be aware, the ownership of the document gets to you, you have to close it. + * @param _aGTA + * @param _sInputURL + * @return */ public static XComponent loadFromURL(GraphicalTestArguments _aGTA, String _sInputURL) @@ -158,7 +161,7 @@ public class OfficePrint { return null; } Object oDsk = _aGTA.getMultiServiceFactory().createInstance("com.sun.star.frame.Desktop"); - XDesktop aDesktop = (XDesktop)UnoRuntime.queryInterface(XDesktop.class, oDsk); + XDesktop aDesktop = UnoRuntime.queryInterface(XDesktop.class, oDsk); if (aDesktop != null) { @@ -172,7 +175,7 @@ public class OfficePrint { // set here the loadComponentFromURL() properties // at the moment only 'Hidden' is set, so no window is opened at work - ArrayList aPropertyList = new ArrayList(); + ArrayList<PropertyValue> aPropertyList = new ArrayList<PropertyValue>(); // check which properties should set and count it. // if (_aGTA.isHidden()) @@ -209,7 +212,7 @@ public class OfficePrint { GlobalLogWriter.get().println(DateHelper.getDateTimeForHumanreadableLog() + " Load document"); // GlobalLogWriter.get().flush(); - XComponentLoader aCompLoader = (XComponentLoader) UnoRuntime.queryInterface( XComponentLoader.class, aDesktop); + XComponentLoader aCompLoader = UnoRuntime.queryInterface( XComponentLoader.class, aDesktop); // XComponent aDoc = null; @@ -251,11 +254,11 @@ public class OfficePrint { static boolean exportToPDF(XComponent _xComponent, String _sDestinationName) { XServiceInfo xServiceInfo = - (XServiceInfo) UnoRuntime.queryInterface( + UnoRuntime.queryInterface( XServiceInfo.class, _xComponent ); - ArrayList aPropertyList = new ArrayList(); + ArrayList<PropertyValue> aPropertyList = new ArrayList<PropertyValue>(); PropertyValue aFiltername = new PropertyValue(); aFiltername.Name = "FilterName"; aFiltername.Value = getFilterName_forPDF(xServiceInfo); @@ -266,7 +269,7 @@ public class OfficePrint { try { XStorable store = - (XStorable) UnoRuntime.queryInterface( + UnoRuntime.queryInterface( XStorable.class, _xComponent ); store.storeToURL(_sDestinationName, PropertyHelper.createPropertyValueArrayFormArrayList(aPropertyList)); @@ -371,6 +374,10 @@ public class OfficePrint { * Due to the fact we use a printer to convert the file to postscript, the default printer * to create such postscript format must be installed, this is not tested here. * + * @param _aGTA + * @param _sInputURL + * @param _sOutputURL + * @param _sPrintFileURL * @return true, if print has been done. * Be careful, true means only print returns with no errors, to be sure print is really done * check existance of _sPrintFileURL @@ -532,7 +539,7 @@ public class OfficePrint { if (_aGTA.isStoreAllowed()) { // store the document in an other directory - XStorable aStorable = (XStorable) UnoRuntime.queryInterface( XStorable.class, _aDoc); + XStorable aStorable = UnoRuntime.queryInterface( XStorable.class, _aDoc); if (aStorable != null) { PropertyValue [] szEmptyArgs = new PropertyValue [0]; @@ -571,7 +578,7 @@ public class OfficePrint { // Change Pagesettings to DIN A4 GlobalLogWriter.get().println(DateHelper.getDateTimeForHumanreadableLog() + " Print document."); - XPrintable aPrintable = (XPrintable) UnoRuntime.queryInterface( XPrintable.class, _aDoc); + XPrintable aPrintable = UnoRuntime.queryInterface( XPrintable.class, _aDoc); if (aPrintable != null) { // System.out.println(" Set PaperFormat to DIN A4"); @@ -595,7 +602,7 @@ public class OfficePrint { { if (_aGTA.getPrinterName() != null) { - ArrayList aPropertyList = new ArrayList(); + ArrayList<PropertyValue> aPropertyList = new ArrayList<PropertyValue>(); // PropertyValue [] aPrintProps = new PropertyValue[1]; PropertyValue Arg = new PropertyValue(); Arg.Name = "Name"; @@ -619,20 +626,20 @@ public class OfficePrint { // int nPropsCount = 0; // If we are a SpreadSheet (calc), we need to set PrintAllSheets property to 'true' - XServiceInfo xServiceInfo = (XServiceInfo) UnoRuntime.queryInterface( XServiceInfo.class, _aDoc ); + XServiceInfo xServiceInfo = UnoRuntime.queryInterface( XServiceInfo.class, _aDoc ); if ( xServiceInfo.supportsService( "com.sun.star.sheet.SpreadsheetDocument" ) ) { XMultiServiceFactory xMSF = _aGTA.getMultiServiceFactory(); Object aSettings = xMSF.createInstance( "com.sun.star.sheet.GlobalSheetSettings" ); if (aSettings != null) { - XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface( XPropertySet.class, aSettings ); + XPropertySet xPropSet = UnoRuntime.queryInterface( XPropertySet.class, aSettings ); xPropSet.setPropertyValue( "PrintAllSheets", new Boolean( true ) ); GlobalLogWriter.get().println("PrintAllSheets := true"); } } - ArrayList aPrintProps = new ArrayList(); + ArrayList<PropertyValue> aPrintProps = new ArrayList<PropertyValue>(); // GlobalLogWriter.get().println("Property FileName:=" + _sPrintFileURL); // PropertyValue [] aPrintProps = new PropertyValue[nProperties]; @@ -730,6 +737,9 @@ public class OfficePrint { /** + * @param _aGTA + * @param _sAbsoluteOutputPath + * @param _sAbsoluteInputFile * @return true, if the reference (*.prrn file) based on given output path and given input path exist. * If OVERWRITE_REFERENCE is set, always return false. */ @@ -783,6 +793,11 @@ public class OfficePrint { * if is null, print only near the Input file path * _sPrintType ".prn" Print input file with StarOffice/OpenOffice.org and the default printer as PostScript * + * @param _aGTA + * @param _sAbsoluteOutputPath + * @param _sAbsoluteInputFile + * @return + * @throws ConvWatchCancelException */ public static boolean buildReference(GraphicalTestArguments _aGTA, String _sAbsoluteOutputPath, @@ -933,7 +948,7 @@ public class OfficePrint { try { Object oObj = _xMSF.createInstance("com.sun.star.document.TypeDetection"); - aTypeDetection = (XTypeDetection)UnoRuntime.queryInterface(XTypeDetection.class, oObj); + aTypeDetection = UnoRuntime.queryInterface(XTypeDetection.class, oObj); } catch(com.sun.star.uno.Exception e) { @@ -975,7 +990,7 @@ public class OfficePrint { } if (aObj != null) { - XNameAccess aNameAccess = (XNameAccess)UnoRuntime.queryInterface(XNameAccess.class, aObj); + XNameAccess aNameAccess = UnoRuntime.queryInterface(XNameAccess.class, aObj); if (aNameAccess != null) { @@ -1066,7 +1081,7 @@ public class OfficePrint { } if (aObj != null) { - XNameAccess aNameAccess = (XNameAccess)UnoRuntime.queryInterface(XNameAccess.class, aObj); + XNameAccess aNameAccess = UnoRuntime.queryInterface(XNameAccess.class, aObj); if (aNameAccess != null) { if (! aNameAccess.hasByName(_sFilterName)) @@ -1134,7 +1149,7 @@ public class OfficePrint { try { Object oObj = _xMSF.createInstance("com.sun.star.document.TypeDetection"); - aTypeDetection = (XTypeDetection)UnoRuntime.queryInterface(XTypeDetection.class, oObj); + aTypeDetection =UnoRuntime.queryInterface(XTypeDetection.class, oObj); } catch(com.sun.star.uno.Exception e) { @@ -1143,7 +1158,7 @@ public class OfficePrint { } if (aTypeDetection != null) { - XNameAccess aNameAccess = (XNameAccess)UnoRuntime.queryInterface(XNameAccess.class, aTypeDetection); + XNameAccess aNameAccess = UnoRuntime.queryInterface(XNameAccess.class, aTypeDetection); if (aNameAccess != null) { @@ -1242,12 +1257,12 @@ public class OfficePrint { // TODO: Do we need to wait? TimeHelper.waitInSeconds(1, "wait after loadFromURL."); - XServiceInfo xServiceInfo = (XServiceInfo) UnoRuntime.queryInterface( XServiceInfo.class, aDoc ); + XServiceInfo xServiceInfo = UnoRuntime.queryInterface( XServiceInfo.class, aDoc ); // String sFilter = getFilterName_forExcel(xServiceInfo); // System.out.println("Filter is " + sFilter); // store the document in an other directory - XStorable xStorable = (XStorable) UnoRuntime.queryInterface( XStorable.class, aDoc); + XStorable xStorable = UnoRuntime.queryInterface( XStorable.class, aDoc); if (xStorable == null) { GlobalLogWriter.get().println("com.sun.star.frame.XStorable is null"); @@ -1266,7 +1281,7 @@ public class OfficePrint { // initialize PropertyArray // PropertyValue [] aStoreProps = new PropertyValue[ nPropertyCount ]; // int nPropertyIndex = 0; - ArrayList aPropertyList = new ArrayList(); + ArrayList<PropertyValue> aPropertyList = new ArrayList<PropertyValue>(); String sExtension = ""; diff --git a/qadevOOo/runner/graphical/BuildID.java b/qadevOOo/runner/graphical/BuildID.java index 4c5907ff34ad..cf9188d84a47 100644 --- a/qadevOOo/runner/graphical/BuildID.java +++ b/qadevOOo/runner/graphical/BuildID.java @@ -93,7 +93,7 @@ public class BuildID } else { - GlobalLogWriter.get().println("soffice executable not found."); + GlobalLogWriter.println("soffice executable not found."); } // int dummy = 0; @@ -119,7 +119,7 @@ public class BuildID } else { - GlobalLogWriter.get().println("Property Build, can't open file '" + sOfficePath + "', please check."); + GlobalLogWriter.println("Property Build, can't open file '" + sOfficePath + "', please check."); } return sBuildID; } @@ -144,7 +144,7 @@ public class BuildID } else { - GlobalLogWriter.get().println("Property Build, can't open file '" + sOfficePath + "', please check."); + GlobalLogWriter.println("Property Build, can't open file '" + sOfficePath + "', please check."); } return sBuildID; } diff --git a/qadevOOo/runner/graphical/DirectoryHelper.java b/qadevOOo/runner/graphical/DirectoryHelper.java index f3349da2800a..46930d19425f 100644 --- a/qadevOOo/runner/graphical/DirectoryHelper.java +++ b/qadevOOo/runner/graphical/DirectoryHelper.java @@ -38,7 +38,7 @@ import java.util.ArrayList; */ public class DirectoryHelper { - ArrayList m_aFileList = new ArrayList(); + ArrayList<String> m_aFileList = new ArrayList<String>(); boolean m_bRecursiveIsAllowed = true; void setRecursiveIsAllowed(boolean _bValue) @@ -73,6 +73,10 @@ public class DirectoryHelper * System.out.println(aEntry); * } * + * @param _sDirectory + * @param _aFileFilter + * @param _bRecursiveIsAllowed + * @return list of directories */ public static Object[] traverse( String _sDirectory, FileFilter _aFileFilter, boolean _bRecursiveIsAllowed ) { diff --git a/qadevOOo/runner/graphical/EnhancedComplexTestCase.java b/qadevOOo/runner/graphical/EnhancedComplexTestCase.java index b465437f578f..c3ec2b3e8336 100644 --- a/qadevOOo/runner/graphical/EnhancedComplexTestCase.java +++ b/qadevOOo/runner/graphical/EnhancedComplexTestCase.java @@ -44,8 +44,8 @@ abstract public class EnhancedComplexTestCase extends ComplexTestCase implements private void callEntry(String _sEntry, ParameterHelper _aParam) { - log.println("- next file is: ------------------------------"); - log.println(_sEntry); + // log.println("- next file is: ------------------------------"); + log.println("File: " + _sEntry); // TODO: check if 'sEntry' is a guilty document. File aFile = new File(_aParam.getInputPath()); String sPath = _aParam.getInputPath(); @@ -79,7 +79,8 @@ private void callEntry(String _sEntry, ParameterHelper _aParam) // sNewDiffPath = FileHelper.appendPath(sNewDiffPath, sNewSubDir); // } } - log.println("sEntry: " + _sEntry + " " /* + sNewReferencePath + " " */ + sNewOutputPath); + // log.println("sEntry: " + _sEntry + " " /* + sNewReferencePath + " " */ + sNewOutputPath); + log.println("Outputpath: " + sNewOutputPath); // call interface with parameters @@ -187,12 +188,34 @@ private void callEntry(String _sEntry, ParameterHelper _aParam) } else { - String sPath = FileHelper.getPath(sInputPath); - String sBasename = FileHelper.getBasename(sInputPath); + String sInputPathWithPDF = sInputPath + ".pdf"; + File aInputPathWithPDF = new File(sInputPathWithPDF); - // there exist an index file, therefore we assume the given - // file is already converted to postscript or pdf - runThroughEveryReportInIndex(sPath, sBasename, _aParam); + if (aInputPathWithPDF.exists() && + _aParam.getReferenceType().toLowerCase().equals("pdf")) + { + // create PDF only if a pdf file exists and creatortype is set to PDF + callEntry(sInputPathWithPDF, _aParam); + } + else + { + String sInputPathWithPS = sInputPath + ".ps"; + + File aInputPathWithPS = new File(sInputPathWithPS); + if (aInputPathWithPS.exists()) + { + callEntry(sInputPathWithPS, _aParam); + } + else + { + String sPath = FileHelper.getPath(sInputPath); + String sBasename = FileHelper.getBasename(sInputPath); + + // there exist an index file, therefore we assume the given + // file is already converted to postscript or pdf + runThroughEveryReportInIndex(sPath, sBasename, _aParam); + } + } } } } @@ -210,7 +233,7 @@ private void callEntry(String _sEntry, ParameterHelper _aParam) { // special case for odb files int nFileCount = aIniFile.getIntValue(_sBasename, "reportcount", 0); - ArrayList aList = new ArrayList(); + ArrayList<String> aList = new ArrayList<String>(); for (int i=0;i<nFileCount;i++) { String sValue = aIniFile.getValue(_sBasename, "report" + i); @@ -230,7 +253,7 @@ private void callEntry(String _sEntry, ParameterHelper _aParam) // get the bad status and store it into the for (int i=0;i<aList.size();i++) { - String sEntry = (String)aList.get(i); + String sEntry = aList.get(i); callEntry(sEntry, _aParam); // we want to know the current status of the run through @@ -265,7 +288,12 @@ private void callEntry(String _sEntry, ParameterHelper _aParam) } } } + else + { + assure("File '" + sIndexFile + "' doesn't exists.", aIndexFile.exists(), true); + } } + private String getPSorPDFNameFromIniFile(IniFile _aIniFile, String _sName) { boolean bHasPostscriptOrPDF = false; @@ -419,7 +447,7 @@ private void callEntry(String _sEntry, ParameterHelper _aParam) { // special case for odb files int nFileCount = aIniFile.getIntValue(sBasename, "reportcount", 0); - ArrayList aList = new ArrayList(); + ArrayList<String> aList = new ArrayList<String>(); for (int i=0;i<nFileCount;i++) { String sValue = aIniFile.getValue(sBasename, "report" + i); @@ -439,7 +467,7 @@ private void callEntry(String _sEntry, ParameterHelper _aParam) for (int i=0;i<aList.size();i++) { - String sPSFile = (String)aList.get(i); + String sPSFile = aList.get(i); // TODO: this information has to come out of the ini files String sStatusRunThrough = ""; diff --git a/qadevOOo/runner/graphical/FileHelper.java b/qadevOOo/runner/graphical/FileHelper.java index feb9e152e5d9..892f652567c1 100644 --- a/qadevOOo/runner/graphical/FileHelper.java +++ b/qadevOOo/runner/graphical/FileHelper.java @@ -50,9 +50,9 @@ public class FileHelper String sOSArch = System.getProperty("os.arch"); String sOSVersion = System.getProperty("os.version"); - GlobalLogWriter.get().println(sOSName); - GlobalLogWriter.get().println(sOSArch); - GlobalLogWriter.get().println(sOSVersion); + GlobalLogWriter.println(sOSName); + GlobalLogWriter.println(sOSArch); + GlobalLogWriter.println(sOSVersion); } @@ -110,7 +110,7 @@ public class FileHelper } catch (NullPointerException e) { - GlobalLogWriter.get().println("Exception caught. FileHelper.isDir('" + _sDir + "')"); + GlobalLogWriter.println("Exception caught. FileHelper.isDir('" + _sDir + "')"); e.printStackTrace(); } return false; @@ -258,7 +258,7 @@ public class FileHelper } catch (java.io.IOException e) { - GlobalLogWriter.get().println("Exception caught. FileHelper.makeDirectories('" + new_dir.getAbsolutePath() + "')"); + GlobalLogWriter.println("Exception caught. FileHelper.makeDirectories('" + new_dir.getAbsolutePath() + "')"); } } } @@ -361,9 +361,9 @@ public class FileHelper { if (m_bDebugTextShown == false) { - GlobalLogWriter.get().println("Found file: " + sName); - GlobalLogWriter.get().println("Activate debug mode."); - GlobalLogWriter.get().println("If debug mode is no longer necessary, remove the above file."); + GlobalLogWriter.println("Found file: " + sName); + GlobalLogWriter.println("Activate debug mode."); + GlobalLogWriter.println("If debug mode is no longer necessary, remove the above file."); m_bDebugTextShown = true; } bDebug = true; @@ -463,6 +463,16 @@ public class FileHelper { return false; } + // leave out files starts with '.~lock.' these are OpenOffice.org lock files + if (pathname.getName().startsWith(".~lock.")) + { + return false; + } + // leave out files ends with '#' these could be temp files + if (pathname.getName().endsWith("#")) + { + return false; + } if (pathname.getName().endsWith(".prn")) { return false; @@ -592,7 +602,7 @@ public class FileHelper if (_sFile.startsWith("file://")) { sFilename = FileHelper.getSystemPathFromFileURL(_sFile); - GlobalLogWriter.get().println("CreateInfoFile: '" + sFilename + "'" ); + GlobalLogWriter.println("CreateInfoFile: '" + sFilename + "'" ); } else { @@ -682,7 +692,7 @@ public class FileHelper } catch (java.io.IOException e) { - GlobalLogWriter.get().println("can't create Info file."); + GlobalLogWriter.println("can't create Info file."); e.printStackTrace(); } aIniFile.close(); diff --git a/qadevOOo/runner/graphical/GlobalLogWriter.java b/qadevOOo/runner/graphical/GlobalLogWriter.java index a8deabfbce0a..478d3323abda 100644 --- a/qadevOOo/runner/graphical/GlobalLogWriter.java +++ b/qadevOOo/runner/graphical/GlobalLogWriter.java @@ -33,11 +33,22 @@ import stats.SimpleLogWriter; public class GlobalLogWriter { private static LogWriter m_aGlobalLogWriter = null; - public static synchronized void println(String _sMsg) + + /** + * This is just a helper to get clearer code. + * use this GlobalLogWriter.println(...) + * @param _sMsg + */ + protected static synchronized void println(String _sMsg) { get().println(_sMsg); } - public static synchronized LogWriter get() + + /** + * @deprecated use GlobalLogWriter.println(...) direct + * @return + */ + protected static synchronized LogWriter get() { if (m_aGlobalLogWriter == null) { @@ -52,7 +63,7 @@ public class GlobalLogWriter // get().initialize(null, true); // } - public static synchronized void set(LogWriter _aLog) + protected static synchronized void set(LogWriter _aLog) { m_aGlobalLogWriter = _aLog; } diff --git a/qadevOOo/runner/graphical/HTMLResult.java b/qadevOOo/runner/graphical/HTMLResult.java index 85ee0e88d356..af2a31a308ea 100644 --- a/qadevOOo/runner/graphical/HTMLResult.java +++ b/qadevOOo/runner/graphical/HTMLResult.java @@ -59,7 +59,7 @@ public class HTMLResult catch (java.io.IOException e) { e.printStackTrace(); - GlobalLogWriter.get().println("ERROR: Can't create HTML Outputter"); + GlobalLogWriter.println("ERROR: Can't create HTML Outputter"); // return null; } // m_sFilename = sFilename; diff --git a/qadevOOo/runner/graphical/IDocument.java b/qadevOOo/runner/graphical/IDocument.java index 3f724d5c5d9c..e23ddd4b91a1 100644 --- a/qadevOOo/runner/graphical/IDocument.java +++ b/qadevOOo/runner/graphical/IDocument.java @@ -40,7 +40,7 @@ public interface IDocument * @param _sDocument * @param _sResult * @param _aParams - * @throws graphical.DocumentLoaderException + * @throws OfficeException */ public void checkOneFile(String _sDocument, String _sResult, ParameterHelper _aParams) throws OfficeException; } diff --git a/qadevOOo/runner/graphical/IniFile.java b/qadevOOo/runner/graphical/IniFile.java index 832aef795e71..bd54a66b65fd 100644 --- a/qadevOOo/runner/graphical/IniFile.java +++ b/qadevOOo/runner/graphical/IniFile.java @@ -26,7 +26,7 @@ ************************************************************************/ package graphical; -import java.io.BufferedReader; +// import java.io.BufferedReader; import java.io.File; import java.io.RandomAccessFile; import java.util.ArrayList; @@ -44,7 +44,7 @@ public class IniFile implements Enumeration * Problem, if ini file changed why other write something difference, we don't realise this. */ private String m_sFilename; - private ArrayList m_aList; + private ArrayList<String> m_aList; boolean m_bListContainUnsavedChanges = false; private int m_aEnumerationPos = 0; @@ -76,13 +76,13 @@ public class IniFile implements Enumeration } } - private ArrayList loadLines() + private ArrayList<String> loadLines() { File aFile = new File(m_sFilename); - ArrayList aLines = new ArrayList(); + ArrayList<String> aLines = new ArrayList<String>(); if (!aFile.exists()) { - GlobalLogWriter.get().println("couldn't find file '" + m_sFilename + "', will be created."); + // GlobalLogWriter.println("couldn't find file '" + m_sFilename + "', will be created."); // DebugHelper.exception(BasicErrorCode.SbERR_FILE_NOT_FOUND, ""); // m_bListContainUnsavedChanges = false; return aLines; @@ -104,14 +104,14 @@ public class IniFile implements Enumeration } catch (java.io.FileNotFoundException fne) { - GlobalLogWriter.get().println("couldn't open file " + m_sFilename); - GlobalLogWriter.get().println("Message: " + fne.getMessage()); + GlobalLogWriter.println("couldn't open file " + m_sFilename); + GlobalLogWriter.println("Message: " + fne.getMessage()); // DebugHelper.exception(BasicErrorCode.SbERR_FILE_NOT_FOUND, ""); } catch (java.io.IOException ie) { - GlobalLogWriter.get().println("Exception occurs while reading from file " + m_sFilename); - GlobalLogWriter.get().println("Message: " + ie.getMessage()); + GlobalLogWriter.println("Exception occurs while reading from file " + m_sFilename); + GlobalLogWriter.println("Message: " + ie.getMessage()); // DebugHelper.exception(BasicErrorCode.SbERR_INTERNAL_ERROR, ie.getMessage()); } try @@ -120,8 +120,8 @@ public class IniFile implements Enumeration } catch (java.io.IOException ie) { - GlobalLogWriter.get().println("Couldn't close file " + m_sFilename); - GlobalLogWriter.get().println("Message: " + ie.getMessage()); + GlobalLogWriter.println("Couldn't close file " + m_sFilename); + GlobalLogWriter.println("Message: " + ie.getMessage()); // DebugHelper.exception(BasicErrorCode.SbERR_INTERNAL_ERROR, ie.getMessage()); } return aLines; @@ -165,7 +165,7 @@ public class IniFile implements Enumeration private String getItem(int i) { - return (String) m_aList.get(i); + return m_aList.get(i); } private String buildSectionName(String _sSectionName) @@ -380,7 +380,7 @@ public class IniFile implements Enumeration } catch (java.lang.NumberFormatException e) { - GlobalLogWriter.get().println("IniFile.getIntValue(): Caught a number format exception, return the default value."); + GlobalLogWriter.println("IniFile.getIntValue(): Caught a number format exception, return the default value."); } } return nValue; @@ -395,6 +395,8 @@ public class IniFile implements Enumeration write back the ini file to the disk, only if there exist changes * @deprecated use close() instead! */ + + // TODO: make private public void store() { if (m_bListContainUnsavedChanges == false) @@ -411,7 +413,7 @@ public class IniFile implements Enumeration aFile.delete(); if (aFile.exists()) { - GlobalLogWriter.get().println("Couldn't delete the file " + m_sFilename); + GlobalLogWriter.println("Couldn't delete the file " + m_sFilename); return; // DebugHelper.exception(BasicErrorCode.SbERR_INTERNAL_ERROR, "Couldn't delete the file " + m_sFilename); } @@ -439,14 +441,14 @@ public class IniFile implements Enumeration } catch (java.io.FileNotFoundException fne) { - GlobalLogWriter.get().println("couldn't open file for writing " + m_sFilename); - GlobalLogWriter.get().println("Message: " + fne.getMessage()); + GlobalLogWriter.println("couldn't open file for writing " + m_sFilename); + GlobalLogWriter.println("Message: " + fne.getMessage()); // DebugHelper.exception(BasicErrorCode.SbERR_FILE_NOT_FOUND, ""); } catch (java.io.IOException ie) { - GlobalLogWriter.get().println("Exception occurs while writing to file " + m_sFilename); - GlobalLogWriter.get().println("Message: " + ie.getMessage()); + GlobalLogWriter.println("Exception occurs while writing to file " + m_sFilename); + GlobalLogWriter.println("Message: " + ie.getMessage()); // DebugHelper.exception(BasicErrorCode.SbERR_INTERNAL_ERROR, ie.getMessage()); } } @@ -467,7 +469,10 @@ public class IniFile implements Enumeration 1. section doesn't exist, goto end and insert a new section, insert a new key value pair 2. section exist but key not, search section, search key, if key is -1 get last known key position and insert new key value pair there 3. section exist and key exist, remove the old key and insert the key value pair at the same position - */ + * @param _sSection + * @param _sKey + * @param _sValue + */ public void insertValue(String _sSection, String _sKey, String _sValue) { int i = findSection(_sSection); @@ -637,7 +642,7 @@ public class IniFile implements Enumeration { while (i < m_aList.size()) { - String sLine = (String) m_aList.get(i); + String sLine = m_aList.get(i); if (sLine.startsWith("[")) { return i; @@ -657,7 +662,7 @@ public class IniFile implements Enumeration int nLineWithSection = findNextSection(m_aEnumerationPos); if (nLineWithSection != -1) { - String sSection = (String) m_aList.get(nLineWithSection); + String sSection = m_aList.get(nLineWithSection); m_aEnumerationPos = findNextSection(nLineWithSection + 1); sSection = sectionToString(sSection); return sSection; diff --git a/qadevOOo/runner/graphical/JPEGComparator.java b/qadevOOo/runner/graphical/JPEGComparator.java index ed3417e04c9c..a643b2b333c3 100644 --- a/qadevOOo/runner/graphical/JPEGComparator.java +++ b/qadevOOo/runner/graphical/JPEGComparator.java @@ -26,18 +26,19 @@ * * *********************************************************************** */ - package graphical; import helper.OSHelper; import helper.ProcessHandler; import java.io.File; +import java.io.IOException; /** * Helper class to interpret a jpg filename */ class NameDPIPage { + String Name; int DPI; int Page; @@ -69,20 +70,20 @@ class NameDPIPage String sDPI = sNameNoSuffix.substring(nDPIStart + 1, sNameNoSuffix.length() - 8); try { - nDPI = Integer.valueOf(sDPI).intValue(); + nDPI = Integer.valueOf(sDPI).intValue(); } - catch(java.lang.NumberFormatException e) + catch (java.lang.NumberFormatException e) { - GlobalLogWriter.get().println("DPI: Number format exception"); + GlobalLogWriter.println("DPI: Number format exception"); } String sPage = sNameNoSuffix.substring(sNameNoSuffix.length() - 4); try { - nPage = Integer.valueOf(sPage).intValue(); + nPage = Integer.valueOf(sPage).intValue(); } - catch(java.lang.NumberFormatException e) + catch (java.lang.NumberFormatException e) { - GlobalLogWriter.get().println("Page: Number format exception"); + GlobalLogWriter.println("Page: Number format exception"); } } } @@ -95,6 +96,77 @@ class NameDPIPage } } +class CountNotXXXPixelsFromImage extends Thread +{ + + private String m_sFilename; + protected int m_nValue; + + CountNotXXXPixelsFromImage(String _sFilename) + { + m_sFilename = _sFilename; + } + + public int getValue() + { + return m_nValue; + } + + protected void setValue(int _nValue) + { + m_nValue = _nValue; + } + + protected String getFilename() + { + return m_sFilename; + } +} + +class CountNotWhitePixelsFromImage extends CountNotXXXPixelsFromImage +{ + + CountNotWhitePixelsFromImage(String _sFilename) + { + super(_sFilename); + } + + public void run() + { + try + { + final int nNotWhiteCount = PixelCounter.countNotWhitePixelsFromImage(getFilename()); + setValue(nNotWhiteCount); + } + catch (java.io.IOException e) + { + m_nValue = -1; + } + } +} + +class CountNotBlackPixelsFromImage extends CountNotXXXPixelsFromImage +{ + + CountNotBlackPixelsFromImage(String _sFilename) + { + super(_sFilename); + } + + public void run() + { + try + { + final int nNotBlackCount = PixelCounter.countNotBlackPixelsFromImage(getFilename()); + setValue(nNotBlackCount); + } + catch (java.io.IOException e) + { + m_nValue = -1; + } + } +} + /** * * @author ll93751 @@ -102,10 +174,12 @@ class NameDPIPage public class JPEGComparator extends EnhancedComplexTestCase { // @Override + public String[] getTestMethodNames() { return new String[]{"CompareJPEGvsJPEG"}; } + private Tolerance m_aTolerance; /** * test function. @@ -121,8 +195,8 @@ public class JPEGComparator extends EnhancedComplexTestCase public void checkOneFile(String _sDocumentName, String _sResult, ParameterHelper _aParams) throws OfficeException { - // private void callEveryPictureInIniFile(IniFile _aIniFile, String _sSectionName, ParameterHelper _aParam) - // { + // private void callEveryPictureInIniFile(IniFile _aIniFile, String _sSectionName, ParameterHelper _aParam) + // { String sPath = FileHelper.getPath(_sDocumentName); String sSectionName = FileHelper.getBasename(_sDocumentName); @@ -141,8 +215,9 @@ public class JPEGComparator extends EnhancedComplexTestCase // only which has 'pages' has also pictures int nPages = aIniFile.getIntValue(sSectionName, "pages", 0); String sJPEGSchema = aIniFile.getValue(sSectionName, "jpegschema"); - - for (int i=1 ; i<=nPages ; i++) + int nTolerance = aIniFile.getIntValue(sSectionName, "tolerance", 0); + m_aTolerance = new Tolerance(nTolerance); + for (int i = 1; i <= nPages; i++) { String sJPEGFilename = JPEGCreator.getFilenameForJPEGSchema(sJPEGSchema, i); // String sPath = FileHelper.getPath(_aParam.getInputPath()); @@ -171,7 +246,6 @@ public class JPEGComparator extends EnhancedComplexTestCase evaluateResult(sResultIniFile, _aParams); } - private void evaluateResult(String _sDocument, ParameterHelper _aParams) { String sResultIniFile = _sDocument + ".ini"; @@ -185,7 +259,7 @@ public class JPEGComparator extends EnhancedComplexTestCase IniFile aResultIniFile = new IniFile(sResultIniFile); int nPages = aResultIniFile.getIntValue("global", "pages", 0); - for (int i=0;i<nPages;i++) + for (int i = 0; i < nPages; i++) { String sCurrentPage = "page" + String.valueOf(i + 1); int nPercent = aResultIniFile.getIntValue(sCurrentPage, "percent", -1); @@ -195,13 +269,13 @@ public class JPEGComparator extends EnhancedComplexTestCase } else if (nPercent <= 5) { - bad ++; - ok_status=2; + bad++; + ok_status = 2; } else { - ugly ++; - ok_status=3; + ugly++; + ok_status = 3; } } @@ -226,7 +300,7 @@ public class JPEGComparator extends EnhancedComplexTestCase sBad = " bad:=" + bad; sStatusMessage += sBad; } - if (ugly > 0) + if (ugly > 0) { sUgly = " ugly:=" + ugly; sStatusMessage += sUgly; @@ -263,53 +337,67 @@ public class JPEGComparator extends EnhancedComplexTestCase _aParams.getTestParameters().put("current_ok_status", ok_status); // if we have a ugly page, we must return this as a FAILED STATUS in Log file! - // assure( "There exist pages marked as ugly.", ugly == 0) + assure("There exist pages marked as ugly.", ugly == 0); } private void checkOnePicture(String _sDocumentName, String _sResult, ParameterHelper _aParams) { GlobalLogWriter.println("JPEG: Compare difference between '" + _sDocumentName + "' and '" + _sResult + "'"); - File aResultFile = new File(_sResult); - if (aResultFile.isDirectory()) - { - // result is just a directory, so we search for the basename of the source and take this. - String sBasename = FileHelper.getBasename(_sDocumentName); - String sResultFilename = FileHelper.appendPath(_sResult, sBasename); - aResultFile = new File(sResultFilename); - if (aResultFile.exists()) - { - // Original and Result exists - String sInputPath = _aParams.getInputPath(); - if (sInputPath.toLowerCase().endsWith("index.ini")) - { - // special case - // we want to get the buildid from the info file. - - } - - compareJPEG(_sDocumentName, sResultFilename, _aParams); - - } - else - { - GlobalLogWriter.println("Warning: Result JPEG doesn't exists '" + sResultFilename + "'"); - } - } - else - { - // result is also a file - if (aResultFile.exists()) - { - compareJPEG(_sDocumentName, _sResult, _aParams); - } - else - { - GlobalLogWriter.println("Warning: Result JPEG doesn't exists '" + _sResult + "'"); - } - } - } + File aResultFile = new File(_sResult); + if (aResultFile.isDirectory()) + { + // result is just a directory, so we search for the basename of the source and take this. + String sBasename = FileHelper.getBasename(_sDocumentName); + String sResultFilename = FileHelper.appendPath(_sResult, sBasename); + aResultFile = new File(sResultFilename); + if (aResultFile.exists()) + { + // Original and Result exists + String sInputPath = _aParams.getInputPath(); + if (sInputPath.toLowerCase().endsWith("index.ini")) + { + // special case + // we want to get the buildid from the info file. + } + compareJPEG(_sDocumentName, sResultFilename, _aParams); + } + else + { + String sResultFilenamePDF = util.utils.replaceAll13(sResultFilename, ".ps_", ".pdf_"); + File aResultPDFFile = new File(sResultFilenamePDF); + if (aResultPDFFile.exists()) + { + // Original and Result exists + String sInputPath = _aParams.getInputPath(); + if (sInputPath.toLowerCase().endsWith("index.ini")) + { + // special case + // we want to get the buildid from the info file. + } + + compareJPEG(_sDocumentName, sResultFilenamePDF, _aParams); + } + else + { + GlobalLogWriter.println("Warning: Result JPEG doesn't exists '" + sResultFilename + "'"); + } + } + } + else + { + // result is also a file + if (aResultFile.exists()) + { + compareJPEG(_sDocumentName, _sResult, _aParams); + } + else + { + GlobalLogWriter.println("Warning: Result JPEG doesn't exists '" + _sResult + "'"); + } + } + } /** * compare 2 JPEGs, it is a need, that both _sDocumentName and _sResultFilename exist. @@ -318,7 +406,6 @@ public class JPEGComparator extends EnhancedComplexTestCase * @param _aParams * @return 0=no difference !=0 both files differ */ - private void compareJPEG(String _sDocumentName, String _sResult, ParameterHelper _aParams) { NameDPIPage aNameDPIPage = NameDPIPage.interpret(_sDocumentName); @@ -328,7 +415,7 @@ public class JPEGComparator extends EnhancedComplexTestCase String sDestinationBasename = FileHelper.getBasename(_sResult); String sDestinationPath = FileHelper.getPath(_sResult); - if (! sSourcePath.equals(sDestinationPath)) + if (!sSourcePath.equals(sDestinationPath)) { // we want to have all in one Directory, Original, Reference and the Difference result. // copy the original file to the reference path @@ -354,9 +441,23 @@ public class JPEGComparator extends EnhancedComplexTestCase // this means, 1=only one color, no differences found. int nResult = identify(sDifference); int nPercentColorDiffer = 0; - String sResult = "NO"; + + String sResult = "YES"; + + if (m_aTolerance != null) + { + final int nAcceptedTolerance = m_aTolerance.getAccept(); + if (nResult <= nAcceptedTolerance) + { + nResult = 1; + sResult = "IN TOLERANCE"; + GlobalLogWriter.println("The differences are in tolerance."); + + } + } if (nResult != 1) { + sResult = "NO"; try { nPercentColorDiffer = estimateGfx(sSource, sDestination, sDifference); @@ -366,10 +467,6 @@ public class JPEGComparator extends EnhancedComplexTestCase GlobalLogWriter.println("Can't estimate the different colors. " + e.getMessage()); } } - else - { - sResult = "YES"; - } // store the result in a result.ini file String sResultFile = FileHelper.appendPath(sDestinationPath, aNameDPIPage.Name + ".ini"); @@ -380,14 +477,16 @@ public class JPEGComparator extends EnhancedComplexTestCase } IniFile aResultIni = new IniFile(sResultFile); - String[] aComment = { + String[] aComment = + { "; This file is automatically created by a graphical.JPEGComparator run", "; ", "; If you see this file in a browser you may have forgotten to set the follows in the property file", "; " + PropertyName.DOC_COMPARATOR_HTML_OUTPUT_PREFIX + "=http://<computer>/gfxcmp_ui/cw.php?inifile=", "; Please check the documentation if you got confused.", "; ", - "; "}; + "; " + }; aResultIni.insertFirstComment(aComment); // write down the global flags @@ -396,7 +495,7 @@ public class JPEGComparator extends EnhancedComplexTestCase // INIoutput.writeValue("buildid", _sBuildID); // INIoutput.writeValue("refbuildid", _sRefBuildID); - String sRefBuildId = (String)_aParams.getTestParameters().get("RefBuildId"); + String sRefBuildId = (String) _aParams.getTestParameters().get("RefBuildId"); if (sRefBuildId == null) { sRefBuildId = ""; @@ -410,8 +509,8 @@ public class JPEGComparator extends EnhancedComplexTestCase // write down flags for each page String sSection = "page" + String.valueOf(nPage); - aResultIni.insertValue(sSection, "oldgfx", sSource); - aResultIni.insertValue(sSection, "newgfx", sDestination); + aResultIni.insertValue(sSection, "oldgfx", sSource); + aResultIni.insertValue(sSection, "newgfx", sDestination); aResultIni.insertValue(sSection, "diffgfx", sDifference); aResultIni.insertValue(sSection, "percent", nPercentColorDiffer); aResultIni.insertValue(sSection, "BM", "false"); @@ -490,8 +589,6 @@ public class JPEGComparator extends EnhancedComplexTestCase // INIoutput.close(); // return bResultIsOk; // } - - /** * count how much pixel differ and between Old or New and the Difference graphics * @@ -517,75 +614,119 @@ public class JPEGComparator extends EnhancedComplexTestCase * @return the count of different pixels * @throws java.io.IOException if file access is not possible */ - public static int estimateGfx(String _sOldGfx, String _sNewGfx, String _sDiffGfx) - throws java.io.IOException - { - // new count pixels - final int nNotWhiteCount_OldGraphic = PixelCounter.countNotWhitePixelsFromImage(_sOldGfx); - final int nNotWhiteCount_NewGraphic = PixelCounter.countNotWhitePixelsFromImage(_sNewGfx); - final int nNotBlackCount_DiffGraphic = PixelCounter.countNotBlackPixelsFromImage(_sDiffGfx); + throws java.io.IOException + { + TimeHelper a = new TimeHelper(); + a.start(); + // Count Pixels + final int nNotWhiteCount_OldGraphic = PixelCounter.countNotWhitePixelsFromImage(_sOldGfx); + final int nNotWhiteCount_NewGraphic = PixelCounter.countNotWhitePixelsFromImage(_sNewGfx); + final int nNotBlackCount_DiffGraphic = PixelCounter.countNotBlackPixelsFromImage(_sDiffGfx); + + // Count Pixels in different threads +// CountNotWhitePixelsFromImage t1 = new CountNotWhitePixelsFromImage(_sOldGfx); +// CountNotWhitePixelsFromImage t2 = new CountNotWhitePixelsFromImage(_sNewGfx); +// CountNotBlackPixelsFromImage t3 = new CountNotBlackPixelsFromImage(_sDiffGfx); +// t1.start(); +// t2.start(); +// t3.start(); +// try +// { +// t1.join(); +// } +// catch (InterruptedException ex) +// { +// GlobalLogWriter.get().println("Thread 1 failed: " + ex.getMessage()); +// } +// try +// { +// t2.join(); +// } +// catch (InterruptedException ex) +// { +// GlobalLogWriter.get().println("Thread 2 failed: " + ex.getMessage()); +// } +// try +// { +// t3.join(); +// } +// catch (InterruptedException ex) +// { +// GlobalLogWriter.get().println("Thread 3 failed: " + ex.getMessage()); +// } +// final int nNotWhiteCount_OldGraphic = t1.getValue(); +// final int nNotWhiteCount_NewGraphic = t2.getValue(); +// final int nNotBlackCount_DiffGraphic = t3.getValue(); + + a.stop(); + GlobalLogWriter.println("Thread Time is: " + a.getTime()); - int nMinNotWhiteCount = Math.min(nNotWhiteCount_NewGraphic, nNotWhiteCount_OldGraphic); + int nMinNotWhiteCount = Math.min(nNotWhiteCount_NewGraphic, nNotWhiteCount_OldGraphic); - // check if not zero + // check if not zero + if (nMinNotWhiteCount == 0) + { + nMinNotWhiteCount = Math.max(nNotWhiteCount_NewGraphic, nNotWhiteCount_OldGraphic); if (nMinNotWhiteCount == 0) { - nMinNotWhiteCount = Math.max(nNotWhiteCount_NewGraphic, nNotWhiteCount_OldGraphic); - if (nMinNotWhiteCount == 0) - { - nMinNotWhiteCount = 1; - } + nMinNotWhiteCount = 1; } - - int nPercent = Math.abs(nNotBlackCount_DiffGraphic * 100 / nMinNotWhiteCount); - GlobalLogWriter.get().println( "Graphics check, pixel based:" + String.valueOf(nPercent) + "% pixel differ "); - return nPercent; } - private static int compareJPEG(String _sOldGfx, String _sNewGfx, String _sDiffGfx) + int nPercent = Math.abs(nNotBlackCount_DiffGraphic * 100 / nMinNotWhiteCount); + GlobalLogWriter.println("Graphics check, pixel based:" + String.valueOf(nPercent) + "% pixel differ "); + return nPercent; + } + + private static int compareJPEG(String _sOldGfx, String _sNewGfx, String _sDiffGfx) + { + String sComposite = "composite"; + if (OSHelper.isWindows()) { - String sComposite = "composite"; - if (OSHelper.isWindows()) + sComposite = "composite.exe"; + String sIMPath = (String) param.get("imagemagick.path"); + if (sIMPath != null) { - sComposite = "composite.exe"; + sComposite = FileHelper.appendPath(sIMPath, sComposite); } + } - // String sCommand = sComposite + " -compose difference " + - // StringHelper.doubleQuoteIfNeed(_sOldGfx) + " " + - // StringHelper.doubleQuoteIfNeed(_sNewGfx) + " " + - // StringHelper.doubleQuoteIfNeed(_sDiffGfx); + // String sCommand = sComposite + " -compose difference " + + // StringHelper.doubleQuoteIfNeed(_sOldGfx) + " " + + // StringHelper.doubleQuoteIfNeed(_sNewGfx) + " " + + // StringHelper.doubleQuoteIfNeed(_sDiffGfx); - String[] sCommandArray = - { - sComposite, - "-compose", - "difference", - _sOldGfx, - _sNewGfx, - _sDiffGfx - }; - - ProcessHandler aHandler = new ProcessHandler(sCommandArray); - boolean bBackValue = aHandler.executeSynchronously(); - int nExitCode = aHandler.getExitCode(); - if (nExitCode != 0) - { - GlobalLogWriter.println("'" + sComposite + "' return with "); - String sBack = aHandler.getOutputText(); - GlobalLogWriter.get().println("'" + sBack + "'"); - } - else + String[] sCommandArray = + { + sComposite, + "-compose", + "difference", + _sOldGfx, + _sNewGfx, + _sDiffGfx + }; + + ProcessHandler aHandler = new ProcessHandler(sCommandArray); + boolean bBackValue = aHandler.executeSynchronously(); + int nExitCode = aHandler.getExitCode(); + if (nExitCode != 0) + { + GlobalLogWriter.println("'" + sComposite + "' return with "); + String sBack = aHandler.getOutputText(); + GlobalLogWriter.println("'" + sBack + "'"); + } + else + { + // creates an extra smaller difference picture + File aDiffFile = new File(_sDiffGfx); + if (aDiffFile.exists()) { - // creates an extra smaller difference picture - File aDiffFile = new File(_sDiffGfx); - if (aDiffFile.exists()) - { - JPEGCreator.convertToNearSameFileWithWidth340(_sDiffGfx); - } + JPEGCreator.convertToNearSameFileWithWidth340(_sDiffGfx); } - return nExitCode; } + return nExitCode; + } /** * wrapper for ImageMagick identify, @@ -593,58 +734,60 @@ public class JPEGComparator extends EnhancedComplexTestCase * if it's only one color (nResult==1), like background color, there is no difference. */ int identify(String _sDiffGfx) + { + int nResult = 0; + // would like to know what the meaning of %k is for ImageMagick's 'identify' + String sIM_Format = "%k"; + // if (OSHelper.isWindows()) + // { + // sIM_Format = "%%k"; + // } + + String sIdentify = "identify"; + if (OSHelper.isWindows()) { - int nResult = 0; - // would like to know what the meaning of %k is for ImageMagick's 'identify' - String sIM_Format = "%k"; - // if (OSHelper.isWindows()) - // { - // sIM_Format = "%%k"; - // } - - String sIdentify = "identify"; - if (OSHelper.isWindows()) + sIdentify = "identify.exe"; + String sIMPath = (String) param.get("imagemagick.path"); + if (sIMPath != null) { - sIdentify = "identify.exe"; + sIdentify = FileHelper.appendPath(sIMPath, sIdentify); } + } - // String sCommand = sIdentify + " " + sIM_Format + " " + StringHelper.doubleQuoteIfNeed(_sDiffGfx); - - String[] sCommandArray = - { - sIdentify, - "-format", - sIM_Format, - _sDiffGfx - }; - ProcessHandler aHandler = new ProcessHandler(sCommandArray); - boolean bBackValue = aHandler.executeSynchronously(); - int nExitCode = aHandler.getExitCode(); - - String sBack = aHandler.getOutputText(); - GlobalLogWriter.get().println("'" + sBack + "'"); + // String sCommand = sIdentify + " " + sIM_Format + " " + StringHelper.doubleQuoteIfNeed(_sDiffGfx); - // try to interpret the result, which we get as a String - try - { - int nIdx = sBack.indexOf("\n"); - if (nIdx > 0) - { - sBack = sBack.substring(0, nIdx); - } - - nResult = Integer.valueOf(sBack).intValue(); - } - catch(java.lang.NumberFormatException e) + String[] sCommandArray = + { + sIdentify, + "-format", + sIM_Format, + _sDiffGfx + }; + ProcessHandler aHandler = new ProcessHandler(sCommandArray); + boolean bBackValue = aHandler.executeSynchronously(); + int nExitCode = aHandler.getExitCode(); + + String sBack = aHandler.getOutputText(); + GlobalLogWriter.println("'" + sBack + "'"); + + // try to interpret the result, which we get as a String + try + { + int nIdx = sBack.indexOf("\n"); + if (nIdx > 0) { - GlobalLogWriter.get().println("identify(): Number format exception"); - nResult = 0; + sBack = sBack.substring(0, nIdx); } - return nResult; - } - - + nResult = Integer.valueOf(sBack).intValue(); + } + catch (java.lang.NumberFormatException e) + { + GlobalLogWriter.println("identify(): Number format exception"); + nResult = 0; + } + return nResult; + } // public static void main(String [] _args) // { //// give an index.ini file, ok @@ -670,5 +813,4 @@ public class JPEGComparator extends EnhancedComplexTestCase // // org.openoffice.Runner.main(args); // } - } diff --git a/qadevOOo/runner/graphical/JPEGCreator.java b/qadevOOo/runner/graphical/JPEGCreator.java index 5f6343d9780d..a4336229e448 100644 --- a/qadevOOo/runner/graphical/JPEGCreator.java +++ b/qadevOOo/runner/graphical/JPEGCreator.java @@ -75,18 +75,35 @@ public class JPEGCreator extends EnhancedComplexTestCase { createSmallPictures(sJPEGNameSchema); + // read out tolerance file + String sFileDir = FileHelper.getPath(_sDocumentName); + String sBasename = FileHelper.getBasename(_sDocumentName); + int nTolerance = 0; + String sToleranceFile = FileHelper.appendPath(sFileDir, "tolerance.ini"); + File aToleranceFile = new File(sToleranceFile); + if (aToleranceFile.exists()) + { + IniFile aIniFile = new IniFile(sToleranceFile); + nTolerance = aIniFile.getIntValue(sBasename, "accept", 0); // default for all pages + aIniFile.close(); + } + String sIndexFile = FileHelper.appendPath(_sResult, "index.ini"); File aIndexFile = new File(sIndexFile); if (aIndexFile.exists()) { // store only if an index file exists IniFile aIniFile = new IniFile(sIndexFile); - String sBasename = FileHelper.getBasename(_sDocumentName); aIniFile.insertValue(sBasename, "jpegschema", sJPEGNameSchema); aIniFile.insertValue(sBasename, "pages", nPages); + aIniFile.insertValue(sBasename, "tolerance", nTolerance); aIniFile.close(); } } + else + { + assure("There are no pages in document:'" + _sDocumentName + "', maybe document currupt?", false, true); + } } /** @@ -96,6 +113,12 @@ public class JPEGCreator extends EnhancedComplexTestCase */ public void createSmallPictures(String _sJPEGSchema) { + ParameterHelper aParam = new ParameterHelper(param); + if (! aParam.createSmallPictures()) + { + return; + } + int nPages = 0; if (_sJPEGSchema.length() > 0) { @@ -124,6 +147,11 @@ public class JPEGCreator extends EnhancedComplexTestCase */ public static void convertToNearSameFileWithWidth340(String _sJPEGFilename) { + ParameterHelper aParam = new ParameterHelper(param); + if (! aParam.createSmallPictures()) + { + return; + } String sJPEGFilename = _sJPEGFilename.replaceAll("\\\\", "/"); // if (OSHelper.isWindows()) // { @@ -160,7 +188,13 @@ private static void convertToWidth340(String _sFrom, String _To) { // TODO! // HACK Hard coded! - sConvertEXE = "C:\\Programme\\ImageMagick-6.0.3-q8\\convert.exe"; + // sConvertEXE = "C:\\Programme\\ImageMagick-6.0.3-q8\\convert.exe"; + sConvertEXE = "convert.exe"; + String sConvertPath = (String)param.get("imagemagick.path"); + if (sConvertPath != null) + { + sConvertEXE = FileHelper.appendPath(sConvertPath, sConvertEXE); + } } String[] sCommandArray = @@ -178,7 +212,7 @@ private static void convertToWidth340(String _sFrom, String _To) String sBack = aHandler.getOutputText(); if (sBack.length() > 0) { - GlobalLogWriter.get().println("'" + sBack + "'"); + GlobalLogWriter.println("'" + sBack + "'"); } // try to interpret the result, which we get as a String // try @@ -223,7 +257,7 @@ private static void convertToWidth340(String _sFrom, String _To) } else { - GlobalLogWriter.get().println("File: '" + _sFile + "' doesn't exist."); + GlobalLogWriter.println("File: '" + _sFile + "' doesn't exist."); return ""; } String sFileDir = FileHelper.getPath(_sFile); @@ -291,6 +325,16 @@ private static void convertToWidth340(String _sFrom, String _To) if (OSHelper.isWindows()) { sGhostscriptEXE = "gswin32c.exe"; + String sGhostscriptEXE2 = (String)param.get("gs.exe"); + if (sGhostscriptEXE2 != null) + { + sGhostscriptEXE = sGhostscriptEXE2; + } + String sGhostscriptPath = (String)param.get("gs.path"); + if (sGhostscriptPath != null) + { + sGhostscriptEXE = FileHelper.appendPath(sGhostscriptPath, sGhostscriptEXE); + } } // String sCommand = sGhostscriptEXE + " -dNOPROMPT -dBATCH -sDEVICE=jpeg -r" + String.valueOf(_nResolutionInDPI) + " -dNOPAUSE -sOutputFile=" + StringHelper.doubleQuoteIfNeed(sJPGFilename) + " " + StringHelper.doubleQuoteIfNeed(sOriginalFile); @@ -333,6 +377,7 @@ private static void convertToWidth340(String _sFrom, String _To) { // return only a valid schema name if there at least one page. sJPEGNameSchema = ""; + assure("Document '" + sPostscriptOrPDFFile + "' doesn't create pages.", false, true); } } else diff --git a/qadevOOo/runner/graphical/MSOfficePostscriptCreator.java b/qadevOOo/runner/graphical/MSOfficePostscriptCreator.java index 8a85c6b32afd..86eb28143ed2 100644 --- a/qadevOOo/runner/graphical/MSOfficePostscriptCreator.java +++ b/qadevOOo/runner/graphical/MSOfficePostscriptCreator.java @@ -88,14 +88,14 @@ public class MSOfficePostscriptCreator implements IOffice if (! isMSOfficeDocumentFormat(m_sDocumentName)) { - GlobalLogWriter.get().println("This document type is not recognized as MSOffice format, as default fallback StarOffice/OpenOffice.org instead is used."); + GlobalLogWriter.println("This document type is not recognized as MSOffice format, as default fallback StarOffice/OpenOffice.org instead is used."); throw new OfficeException("This document type is not recognized as MSOffice format, as default fallback StarOffice/OpenOffice.org instead is used."); } } public void storeAsPostscript() throws OfficeException { - GlobalLogWriter.get().println("USE MSOFFICE AS EXPORT FORMAT."); + GlobalLogWriter.println("USE MSOFFICE AS EXPORT FORMAT."); try { String sDocumentName = m_sDocumentName + ".ps"; @@ -112,12 +112,12 @@ public class MSOfficePostscriptCreator implements IOffice catch(OfficeException e) { e.printStackTrace(); - GlobalLogWriter.get().println(e.getMessage()); + GlobalLogWriter.println(e.getMessage()); throw new OfficeException("Exception caught. Problem with MSOffice printer methods."); } catch(java.io.IOException e) { - GlobalLogWriter.get().println(e.getMessage()); + GlobalLogWriter.println(e.getMessage()); throw new OfficeException("IOException caught. Problem with MSOffice printer methods."); } } @@ -177,11 +177,11 @@ public class MSOfficePostscriptCreator implements IOffice private boolean isMSOfficeDocumentFormat(String _sFile) { String sDocumentSuffix = FileHelper.getSuffix(_sFile); - if (isWordDocument(sDocumentSuffix)) return true; - if (isExcelDocument(sDocumentSuffix)) return true; - if (isPowerPointDocument(sDocumentSuffix)) return true; + if (isWordDocument(sDocumentSuffix)) {return true;} + if (isExcelDocument(sDocumentSuffix)) {return true;} + if (isPowerPointDocument(sDocumentSuffix)) {return true;} // if suffix is xml, return also true, but we can't decide if word or excel - if (sDocumentSuffix.toLowerCase().endsWith(".xml")) return true; + if (sDocumentSuffix.toLowerCase().endsWith(".xml")) {return true;} return false; } @@ -191,7 +191,7 @@ public class MSOfficePostscriptCreator implements IOffice { String sDocumentSuffix = FileHelper.getSuffix(_sInputFile); String sFilterName = _aGTA.getExportFilterName(); - ArrayList aStartCommand = new ArrayList(); + ArrayList<String> aStartCommand = new ArrayList<String>(); if (isWordDocument(sDocumentSuffix)) { aStartCommand = createWordStoreHelper(); @@ -222,7 +222,7 @@ public class MSOfficePostscriptCreator implements IOffice } else { - GlobalLogWriter.get().println("No Microsoft Office document format found."); + GlobalLogWriter.println("No Microsoft Office document format found."); throw new WrongSuffixException("No MS office document format found."); } @@ -249,6 +249,11 @@ public class MSOfficePostscriptCreator implements IOffice // ----------------------------------------------------------------------------- /** * print the given file (_sInputFile) to the file name (_sPrintFile) + * @param _aGTA + * @param _sInputFile + * @param _sPrintFilename + * @throws OfficeException + * @throws java.io.IOException */ public void printToFileWithMSOffice( ParameterHelper _aGTA, String _sInputFile, @@ -258,7 +263,7 @@ public class MSOfficePostscriptCreator implements IOffice setPrinterName(_aGTA.getPrinterName()); - ArrayList aStartCommand = new ArrayList(); + ArrayList<String> aStartCommand = new ArrayList<String>(); if (isWordDocument(sDocumentSuffix)) { aStartCommand = createWordPrintHelper(); @@ -293,7 +298,7 @@ public class MSOfficePostscriptCreator implements IOffice } else { - GlobalLogWriter.get().println("No Microsoft Office document format found."); + GlobalLogWriter.println("No Microsoft Office document format found."); // TODO: use a better Exception!!! throw new WrongSuffixException("No Mircosoft Office document format found."); } @@ -368,7 +373,13 @@ public class MSOfficePostscriptCreator implements IOffice } - ArrayList createWordPrintHelper() throws java.io.IOException + private String getPerlExe() + { + final String sPerlExe = System.getProperty("perl.exe", "perl"); + return sPerlExe; + } + + ArrayList<String> createWordPrintHelper() throws java.io.IOException { // create a program in tmp file String sTmpPath = util.utils.getUsersTempDir(); @@ -376,7 +387,7 @@ public class MSOfficePostscriptCreator implements IOffice String sPrintViaWord = "printViaWord.pl"; - ArrayList aList = searchLocalFile(sPrintViaWord); + ArrayList<String> aList = searchLocalFile(sPrintViaWord); if (aList.isEmpty() == false) { return aList; @@ -465,30 +476,30 @@ public class MSOfficePostscriptCreator implements IOffice out.write( "}" + ls); out.close(); - aList.add("perl"); + aList.add(getPerlExe()); aList.add(sFileName); return aList; } // TODO: Maybe give a possibility to say where search the script from outside - ArrayList searchLocalFile(String _sScriptName) + ArrayList<String> searchLocalFile(String _sScriptName) { String userdir = System.getProperty("user.dir"); - ArrayList aList = new ArrayList(); + ArrayList<String> aList = new ArrayList<String>(); String sFileName = FileHelper.appendPath(userdir, _sScriptName); File aPerlScript = new File(sFileName); if (FileHelper.isDebugEnabled()) { - GlobalLogWriter.get().println("Search for local existance of " + aPerlScript.getAbsolutePath()); + GlobalLogWriter.println("Search for local existance of " + aPerlScript.getAbsolutePath()); } if (aPerlScript.exists()) { if (FileHelper.isDebugEnabled()) { - GlobalLogWriter.get().println("OK, found it, use this instead the internal one."); + GlobalLogWriter.println("OK, found it, use this instead the internal one."); } String sName = aPerlScript.getAbsolutePath(); @@ -501,7 +512,7 @@ public class MSOfficePostscriptCreator implements IOffice return aList; } - ArrayList createWordStoreHelper() throws java.io.IOException + ArrayList<String> createWordStoreHelper() throws java.io.IOException { // create a program in tmp file String sTmpPath = util.utils.getUsersTempDir(); @@ -510,7 +521,7 @@ public class MSOfficePostscriptCreator implements IOffice // ArrayList aList = new ArrayList(); String sSaveViaWord = "saveViaWord.pl"; - ArrayList aList = searchLocalFile(sSaveViaWord); + ArrayList<String> aList = searchLocalFile(sSaveViaWord); if (aList.isEmpty() == false) { return aList; @@ -519,7 +530,7 @@ public class MSOfficePostscriptCreator implements IOffice String sName = FileHelper.appendPath(sTmpPath, sSaveViaWord); if (FileHelper.isDebugEnabled()) { - GlobalLogWriter.get().println("No local found, create a perl script: " + sName); + GlobalLogWriter.println("No local found, create a perl script: " + sName); } File aFile = new File(sName); @@ -577,13 +588,13 @@ public class MSOfficePostscriptCreator implements IOffice out.write( "$Word->Quit(); " + ls ); out.close(); - aList.add("perl"); + aList.add(getPerlExe()); aList.add(sName); return aList; } - ArrayList createExcelPrintHelper() throws java.io.IOException + ArrayList<String> createExcelPrintHelper() throws java.io.IOException { // create a program in tmp file String sTmpPath = util.utils.getUsersTempDir(); @@ -591,7 +602,7 @@ public class MSOfficePostscriptCreator implements IOffice String sPrintViaExcel = "printViaExcel.pl"; - ArrayList aList = searchLocalFile(sPrintViaExcel); + ArrayList<String> aList = searchLocalFile(sPrintViaExcel); if (aList.isEmpty() == false) { return aList; @@ -599,14 +610,20 @@ public class MSOfficePostscriptCreator implements IOffice String sName = FileHelper.appendPath(sTmpPath, sPrintViaExcel); if (FileHelper.isDebugEnabled()) { - GlobalLogWriter.get().println("No local found, create a perl script: " + sName); + GlobalLogWriter.println("No local found, create a perl script: " + sName); } File aFile = new File(sName); FileWriter out = new FileWriter(aFile); - out.write( "eval 'exec perl -wS $0 ${1+\"$@\"}' " + ls ); - out.write( " if 0; " + ls ); + // out.write( "eval 'exec perl -wS $0 ${1+\"$@\"}' " + ls ); + // out.write( " if 0; " + ls ); + out.write("#BEGIN" + ls); + out.write("#{" + ls); + out.write("#" + ls); + out.write("# # insert HACK" + ls); + out.write("# unshift(@INC, '');" + ls); + out.write("#}" + ls); out.write( "use strict; " + ls ); out.write( " " + ls ); out.write( "if ( $^O ne \"MSWin32\") " + ls ); @@ -675,12 +692,12 @@ public class MSOfficePostscriptCreator implements IOffice out.write( "}" + ls); out.close(); - aList.add("perl"); + aList.add(getPerlExe()); aList.add(sName); return aList; } - ArrayList createExcelStoreHelper() throws java.io.IOException + ArrayList<String> createExcelStoreHelper() throws java.io.IOException { // create a program in tmp file String sTmpPath = util.utils.getUsersTempDir(); @@ -688,7 +705,7 @@ public class MSOfficePostscriptCreator implements IOffice String sSaveViaExcel = "saveViaExcel.pl"; - ArrayList aList = searchLocalFile(sSaveViaExcel); + ArrayList<String> aList = searchLocalFile(sSaveViaExcel); if (aList.isEmpty() == false) { return aList; @@ -696,7 +713,7 @@ public class MSOfficePostscriptCreator implements IOffice String sName = FileHelper.appendPath(sTmpPath, sSaveViaExcel); if (FileHelper.isDebugEnabled()) { - GlobalLogWriter.get().println("No local found, create a script: " + sName); + GlobalLogWriter.println("No local found, create a script: " + sName); } File aFile = new File(sName); @@ -764,12 +781,12 @@ public class MSOfficePostscriptCreator implements IOffice out.write( "$Excel->Quit(); " + ls ); out.close(); - aList.add("perl"); + aList.add(getPerlExe()); aList.add(sName); return aList; } - ArrayList createPowerPointPrintHelper() throws java.io.IOException + ArrayList<String> createPowerPointPrintHelper() throws java.io.IOException { // create a program in tmp file String sTmpPath = util.utils.getUsersTempDir(); @@ -777,7 +794,7 @@ public class MSOfficePostscriptCreator implements IOffice String sPrintViaPowerPoint = "printViaPowerPoint.pl"; - ArrayList aList = searchLocalFile(sPrintViaPowerPoint); + ArrayList<String> aList = searchLocalFile(sPrintViaPowerPoint); if (aList.isEmpty() == false) { return aList; @@ -785,7 +802,7 @@ public class MSOfficePostscriptCreator implements IOffice String sName = FileHelper.appendPath(sTmpPath, sPrintViaPowerPoint); if (FileHelper.isDebugEnabled()) { - GlobalLogWriter.get().println("No local found, create a script: " + sName); + GlobalLogWriter.println("No local found, create a script: " + sName); } File aFile = new File(sName); @@ -865,7 +882,7 @@ public class MSOfficePostscriptCreator implements IOffice out.write( "}" + ls); out.close(); - aList.add("perl"); + aList.add(getPerlExe()); aList.add(sName); return aList; } @@ -879,7 +896,7 @@ public class MSOfficePostscriptCreator implements IOffice File aFile = new File(_sFilename); if (! aFile.exists()) { - GlobalLogWriter.get().println("couldn't find file " + _sFilename); + GlobalLogWriter.println("couldn't find file " + _sFilename); return ""; } RandomAccessFile aReader = null; @@ -911,7 +928,7 @@ public class MSOfficePostscriptCreator implements IOffice } else { - GlobalLogWriter.get().println("Unknown/unsupported data file: " + aLine); + GlobalLogWriter.println("Unknown/unsupported data file: " + aLine); } } } diff --git a/qadevOOo/runner/graphical/Office.java b/qadevOOo/runner/graphical/Office.java index 88aeebc6b049..8ecee36cc742 100644 --- a/qadevOOo/runner/graphical/Office.java +++ b/qadevOOo/runner/graphical/Office.java @@ -48,6 +48,7 @@ public class Office implements IOffice m_sResult = _sResult; if (_aParam.getReferenceType().toLowerCase().equals("ooo") || + _aParam.getReferenceType().toLowerCase().equals("ps") || _aParam.getReferenceType().toLowerCase().equals("pdf")) { m_aOffice = new OpenOfficePostscriptCreator(_aParam, m_sResult); diff --git a/qadevOOo/runner/graphical/OpenOfficeDatabaseReportExtractor.java b/qadevOOo/runner/graphical/OpenOfficeDatabaseReportExtractor.java index a325ba5aaf0d..a0592d5ce143 100644 --- a/qadevOOo/runner/graphical/OpenOfficeDatabaseReportExtractor.java +++ b/qadevOOo/runner/graphical/OpenOfficeDatabaseReportExtractor.java @@ -64,7 +64,7 @@ class PropertySetHelper XPropertySet m_xPropertySet; public PropertySetHelper(Object _aObj) { - m_xPropertySet = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, _aObj); + m_xPropertySet = UnoRuntime.queryInterface(XPropertySet.class, _aObj); } /** @@ -115,12 +115,12 @@ public class OpenOfficeDatabaseReportExtractor extends Assurance try { XInterface xInterface = (XInterface) getMultiServiceFactory().createInstance( "com.sun.star.frame.Desktop" ); - m_xDesktop = (XDesktop) UnoRuntime.queryInterface(XDesktop.class, xInterface); + m_xDesktop = UnoRuntime.queryInterface(XDesktop.class, xInterface); } catch (com.sun.star.uno.Exception e) { - GlobalLogWriter.get().println("ERROR: uno.Exception caught"); - GlobalLogWriter.get().println("Message: " + e.getMessage()); + GlobalLogWriter.println("ERROR: uno.Exception caught"); + GlobalLogWriter.println("Message: " + e.getMessage()); } } return m_xDesktop; @@ -149,7 +149,7 @@ public class OpenOfficeDatabaseReportExtractor extends Assurance { if (m_xMultiServiceFactory == null) { - m_xMultiServiceFactory = (XMultiServiceFactory)m_aParameterHelper.getMultiServiceFactory(); + m_xMultiServiceFactory = m_aParameterHelper.getMultiServiceFactory(); } return m_xMultiServiceFactory; } @@ -192,95 +192,11 @@ public class OpenOfficeDatabaseReportExtractor extends Assurance /** * This is the main test Function of current ReportDesignerTest + * @param _sDocument + * @return */ -// public void load(String _sDocumentName) -// { -// // convwatch.GlobalLogWriter.set(log); -// -// // GlobalLogWriter.get().println("Set office watcher"); -// // OfficeWatcher aWatcher = (OfficeWatcher)m_aParameterHelper.getTestParameters().get("Watcher"); -// // GlobalLogWriter.get().setWatcher(aWatcher); -// -// try -// { -// -// // -------------------- preconditions, try to find an office -------------------- -// -//// String sAppExecutionCommand = (String) m_aParameterHelper.getTestParameters().get("AppExecutionCommand"); -//// GlobalLogWriter.get().println("sAppExecutionCommand='" + sAppExecutionCommand + "'"); -//// -//// String sUser = System.getProperty("user.name"); -//// GlobalLogWriter.get().println("user.name='" + sUser + "'"); -//// -//// // String sVCSID = System.getProperty("VCSID"); -//// // GlobalLogWriter.get().println("VCSID='" + sVCSID + "'"); -//// // m_sMailAddress = sVCSID + "@openoffice.org"; -//// m_sMailAddress = System.getProperty("MailAddress"); -//// GlobalLogWriter.get().println("Assumed mail address: " + m_sMailAddress); -//// -//// m_sParentDistinct = System.getProperty("ParentDistinct"); -//// -//// m_sSourceVersion = System.getProperty("SourceVersion"); -//// m_sSourceName = System.getProperty("SourceName"); -//// m_sDestinationVersion = System.getProperty("DestinationVersion"); -//// m_sDestinationName = System.getProperty("DestinationName"); -//// // createDBEntry(); -//// // GlobalLogWriter.get().println("Current CWS: " + m_sCWS_WORK_STAMP); -//// // GlobalLogWriter.get().println("Current MWS: " + m_sUPDMinor); -//// -//// if (m_sSourceVersion == null) -//// { -//// System.out.println("Error, Sourceversion is null."); -//// System.exit(1); -//// } -//// -//// sAppExecutionCommand = sAppExecutionCommand.replaceAll( "\\$\\{USERNAME\\}", sUser); -//// GlobalLogWriter.get().println("sAppExecutionCommand='" + sAppExecutionCommand + "'"); -// -// // an other way to replace strings -// // sAppExecutionCommand = utils.replaceAll13(sAppExecutionCommand, "${USERNAME}", sUser); -// -// // checkIfOfficeExists(sAppExecutionCommand); -// // param.put("AppExecutionCommand", new String(sAppExecutionCommand)); -// -// // System.exit(1); -// -// // --------------------------- Start the given Office --------------------------- -// -// // startOffice(); -// -// // ------------------------------ Start a test run ------------------------------ -// -// // String sCurrentDirectory = System.getProperty("user.dir"); -// // GlobalLogWriter.get().println("Current Dir: " + sCurrentDirectory); -//// String sDocument = (String) m_aParameterHelper.getTestParameters().get(convwatch.PropertyName.DOC_COMPARATOR_INPUT_PATH); -//// sDocument = helper.StringHelper.removeQuoteIfExists( sDocument ); -// startTestForFile(_sDocumentName); -// // if (sDocument.toLowerCase().indexOf("writer") >= 0) -// // { -// // startTestForFile(sDocument, WRITER); -// // } -// // else if (sDocument.toLowerCase().indexOf("calc") >= 0) -// // { -// // startTestForFile(sDocument, CALC); -// // } -// // else -// // { -// // assure("Can't identify the document no 'writer' nor 'calc' in it's name given.", false); -// // } -// } -// catch (AssureException e) -// { -// // stopOffice(); -// // throw new AssureException(e.getMessage()); -// } -// -// // ------------------------------ Office shutdown ------------------------------ -// // stopOffice(); -// } -// ----------------------------------------------------------------------------- - public ArrayList load(String _sDocument /*, int _nType*/) + public ArrayList<String> load(String _sDocument /*, int _nType*/) { // We need to copy the database file to a place where we have write access, NEVER use the docpool for this String sOutputPath = m_aParameterHelper.getOutputPath(); @@ -295,9 +211,9 @@ public class OpenOfficeDatabaseReportExtractor extends Assurance assure("There exists no file: " + sDestinationFile, FileHelper.exists(sDestinationFile)); String sFileURL = URLHelper.getFileURLFromSystemPath(sDestinationFile); - GlobalLogWriter.get().println("File URL: " + sFileURL); + GlobalLogWriter.println("File URL: " + sFileURL); - ArrayList aPropertyList = new ArrayList(); + ArrayList<PropertyValue> aPropertyList = new ArrayList<PropertyValue>(); // FYI: it is not allowed to open the document read only // PropertyValue aReadOnly = new PropertyValue(); // always overwrite already exist files @@ -307,7 +223,7 @@ public class OpenOfficeDatabaseReportExtractor extends Assurance XComponent xDocComponent = loadComponent(sFileURL, getXDesktop(), aPropertyList); - GlobalLogWriter.get().println("Load done"); + GlobalLogWriter.println("Load done"); // context = createUnoService("com.sun.star.sdb.DatabaseContext") // oDataBase = context.getByName("hh") // oDBDoc = oDataBase.DatabaseDocument @@ -318,35 +234,35 @@ public class OpenOfficeDatabaseReportExtractor extends Assurance // reportContainer = oDBDoc.getReportDocuments() // report = reportContainer.loadComponentFromURL("Report40","",0,args) - ArrayList aList = null; + ArrayList<String> aList = null; try { // XInterface x = (XInterface)getMultiServiceFactory().createInstance("com.sun.star.sdb.DatabaseContext"); // assure("can't create instance of com.sun.star.sdb.DatabaseContext", x != null); -// GlobalLogWriter.get().println("createInstance com.sun.star.sdb.DatabaseContext done"); +// GlobalLogWriter.println("createInstance com.sun.star.sdb.DatabaseContext done"); // XNameAccess xNameAccess = (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, x); // showElements(xNameAccess); // Object aObj = xNameAccess.getByName(sFileURL); -// GlobalLogWriter.get().println("1"); +// GlobalLogWriter.println("1"); // PropertySetHelper aHelper = new PropertySetHelper(aObj); // XDocumentDataSource xDataSource = (XDocumentDataSource)UnoRuntime.queryInterface(XDocumentDataSource.class, aObj); // Object aDatabaseDocument = aHelper.getPropertyValueAsObject("DatabaseDocument"); // XOfficeDatabaseDocument xOfficeDBDoc = xDataSource.getDatabaseDocument(); - XOfficeDatabaseDocument xOfficeDBDoc = (XOfficeDatabaseDocument)UnoRuntime.queryInterface(XOfficeDatabaseDocument.class, xDocComponent); + XOfficeDatabaseDocument xOfficeDBDoc = UnoRuntime.queryInterface(XOfficeDatabaseDocument.class, xDocComponent); // XOfficeDatabaseDocument xOfficeDBDoc = (XOfficeDatabaseDocument)UnoRuntime.queryInterface(XOfficeDatabaseDocument.class, xDataSource); assure("can't access DatabaseDocument", xOfficeDBDoc != null); -// GlobalLogWriter.get().println("2"); +// GlobalLogWriter.println("2"); - XModel xDBSource = (XModel)UnoRuntime.queryInterface(XModel.class, xOfficeDBDoc); + XModel xDBSource = UnoRuntime.queryInterface(XModel.class, xOfficeDBDoc); Object aController = xDBSource.getCurrentController(); assure("Controller of xOfficeDatabaseDocument is empty!", aController != null); -// GlobalLogWriter.get().println("3"); +// GlobalLogWriter.println("3"); - XDatabaseDocumentUI aDBDocUI = (XDatabaseDocumentUI)UnoRuntime.queryInterface(XDatabaseDocumentUI.class, aController); + XDatabaseDocumentUI aDBDocUI = UnoRuntime.queryInterface(XDatabaseDocumentUI.class, aController); aDBDocUI.connect(); boolean isConnect = aDBDocUI.isConnected(); if (isConnect) @@ -360,19 +276,19 @@ public class OpenOfficeDatabaseReportExtractor extends Assurance // aHelper = new PropertySetHelper(aController); - XReportDocumentsSupplier xSupplier = (XReportDocumentsSupplier)UnoRuntime.queryInterface(XReportDocumentsSupplier.class, xOfficeDBDoc); + XReportDocumentsSupplier xSupplier = UnoRuntime.queryInterface(XReportDocumentsSupplier.class, xOfficeDBDoc); XNameAccess xNameAccess = xSupplier.getReportDocuments(); assure("xOfficeDatabaseDocument returns no Report Document", xNameAccess != null); -// GlobalLogWriter.get().println("5"); +// GlobalLogWriter.println("5"); showElements(xNameAccess); // Object aActiveConnectionObj = aHelper.getPropertyValueAsObject("ActiveConnection"); Object aActiveConnectionObj = aDBDocUI.getActiveConnection(); assure("ActiveConnection is empty", aActiveConnectionObj != null); -// GlobalLogWriter.get().println("5"); +// GlobalLogWriter.println("5"); - ArrayList aPropertyList2 = new ArrayList(); + ArrayList<PropertyValue> aPropertyList2 = new ArrayList<PropertyValue>(); PropertyValue aActiveConnection = new PropertyValue(); aActiveConnection.Name = "ActiveConnection"; @@ -384,8 +300,8 @@ public class OpenOfficeDatabaseReportExtractor extends Assurance } catch(Exception/*com.sun.star.uno.Exception*/ e) { - GlobalLogWriter.get().println("ERROR: Exception caught"); - GlobalLogWriter.get().println("Message: " + e.getMessage()); + GlobalLogWriter.println("ERROR: Exception caught"); + GlobalLogWriter.println("Message: " + e.getMessage()); } // String mTestDocumentPath = (String) param.get("TestDocumentPath"); @@ -413,7 +329,7 @@ public class OpenOfficeDatabaseReportExtractor extends Assurance String sDBConnection = (String)m_aParameterHelper.getTestParameters().get( convwatch.PropertyName.DB_CONNECTION_STRING ); if (sDBConnection != null && sDBConnection.length() > 0) { - GlobalLogWriter.get().println("DBConnection: " + sDBConnection); + GlobalLogWriter.println("DBConnection: " + sDBConnection); // TODO: DB // DB.init(sDBConnection); @@ -447,9 +363,9 @@ public class OpenOfficeDatabaseReportExtractor extends Assurance } } - private ArrayList loadAndStoreReports(XNameAccess _xNameAccess, ArrayList _aPropertyList /*, int _nType*/ ) + private ArrayList<String> loadAndStoreReports(XNameAccess _xNameAccess, ArrayList<PropertyValue> _aPropertyList /*, int _nType*/ ) { - ArrayList aList = new ArrayList(); + ArrayList<String> aList = new ArrayList<String>(); if (_xNameAccess != null) { String[] sElementNames = _xNameAccess.getElementNames(); @@ -473,7 +389,7 @@ public class OpenOfficeDatabaseReportExtractor extends Assurance private String getFormatExtension(Object _xComponent /* int _nType*/ ) { String sExtension; - XServiceInfo xServiceInfo = (XServiceInfo) UnoRuntime.queryInterface( XServiceInfo.class, _xComponent ); + XServiceInfo xServiceInfo = UnoRuntime.queryInterface( XServiceInfo.class, _xComponent ); if ( xServiceInfo.supportsService( "com.sun.star.sheet.SpreadsheetDocument" ) ) { // calc @@ -567,7 +483,7 @@ public class OpenOfficeDatabaseReportExtractor extends Assurance String sOutputURL = URLHelper.getFileURLFromSystemPath(sOutputPath); - ArrayList aPropertyList = new ArrayList(); // set some properties for storeAsURL + ArrayList<PropertyValue> aPropertyList = new ArrayList<PropertyValue>(); // set some properties for storeAsURL // PropertyValue aFileFormat = new PropertyValue(); // aFileFormat.Name = "FilterName"; @@ -580,19 +496,19 @@ public class OpenOfficeDatabaseReportExtractor extends Assurance aPropertyList.add(aOverwrite); // store the document in an other directory - XStorable aStorable = (XStorable) UnoRuntime.queryInterface( XStorable.class, _xComponent); + XStorable aStorable = UnoRuntime.queryInterface( XStorable.class, _xComponent); if (aStorable != null) { - GlobalLogWriter.get().println("store document as URL: '" + sOutputURL + "'"); + GlobalLogWriter.println("store document as URL: '" + sOutputURL + "'"); try { aStorable.storeAsURL(sOutputURL, PropertyHelper.createPropertyValueArrayFormArrayList(aPropertyList)); } catch (com.sun.star.io.IOException e) { - GlobalLogWriter.get().println("ERROR: Exception caught"); - GlobalLogWriter.get().println("Can't write document URL: '" + sOutputURL + "'"); - GlobalLogWriter.get().println("Message: " + e.getMessage()); + GlobalLogWriter.println("ERROR: Exception caught"); + GlobalLogWriter.println("Can't write document URL: '" + sOutputURL + "'"); + GlobalLogWriter.println("Message: " + e.getMessage()); } } return sBackPathName; @@ -601,26 +517,26 @@ public class OpenOfficeDatabaseReportExtractor extends Assurance private XComponent loadComponent(String _sName, Object _xComponent, ArrayList _aPropertyList) { XComponent xDocComponent = null; - XComponentLoader xComponentLoader = (XComponentLoader) UnoRuntime.queryInterface( XComponentLoader.class, _xComponent ); + XComponentLoader xComponentLoader = UnoRuntime.queryInterface( XComponentLoader.class, _xComponent ); try { PropertyValue[] aLoadProperties = PropertyHelper.createPropertyValueArrayFormArrayList(_aPropertyList); - GlobalLogWriter.get().println("Load component: '" + _sName + "'"); + GlobalLogWriter.println("Load component: '" + _sName + "'"); xDocComponent = xComponentLoader.loadComponentFromURL(_sName, "_blank", FrameSearchFlag.ALL, aLoadProperties); - GlobalLogWriter.get().println("Load component: '" + _sName + "' done"); + GlobalLogWriter.println("Load component: '" + _sName + "' done"); } catch (com.sun.star.io.IOException e) { - GlobalLogWriter.get().println("ERROR: Exception caught"); - GlobalLogWriter.get().println("Can't load document '" + _sName + "'"); - GlobalLogWriter.get().println("Message: " + e.getMessage()); + GlobalLogWriter.println("ERROR: Exception caught"); + GlobalLogWriter.println("Can't load document '" + _sName + "'"); + GlobalLogWriter.println("Message: " + e.getMessage()); } catch (com.sun.star.lang.IllegalArgumentException e) { - GlobalLogWriter.get().println("ERROR: Exception caught"); - GlobalLogWriter.get().println("Illegal Arguments given to loadComponentFromURL."); - GlobalLogWriter.get().println("Message: " + e.getMessage()); + GlobalLogWriter.println("ERROR: Exception caught"); + GlobalLogWriter.println("Illegal Arguments given to loadComponentFromURL."); + GlobalLogWriter.println("Message: " + e.getMessage()); } return xDocComponent; } @@ -628,16 +544,16 @@ public class OpenOfficeDatabaseReportExtractor extends Assurance private void closeComponent(XComponent _xDoc) { // Close the document - XCloseable xCloseable = (XCloseable) UnoRuntime.queryInterface(XCloseable.class, _xDoc); + XCloseable xCloseable = UnoRuntime.queryInterface(XCloseable.class, _xDoc); try { xCloseable.close(true); } catch (com.sun.star.util.CloseVetoException e) { - GlobalLogWriter.get().println("ERROR: CloseVetoException caught"); - GlobalLogWriter.get().println("CloseVetoException occured Can't close document."); - GlobalLogWriter.get().println("Message: " + e.getMessage()); + GlobalLogWriter.println("ERROR: CloseVetoException caught"); + GlobalLogWriter.println("CloseVetoException occured Can't close document."); + GlobalLogWriter.println("Message: " + e.getMessage()); } } diff --git a/qadevOOo/runner/graphical/OpenOfficePostscriptCreator.java b/qadevOOo/runner/graphical/OpenOfficePostscriptCreator.java index 06330a06d9ab..d918634f8d30 100644 --- a/qadevOOo/runner/graphical/OpenOfficePostscriptCreator.java +++ b/qadevOOo/runner/graphical/OpenOfficePostscriptCreator.java @@ -89,7 +89,7 @@ public class OpenOfficePostscriptCreator implements IOffice m_aDocument = loadFromURL(m_aParameterHelper, sInputFileURL); if (m_aDocument == null) { - GlobalLogWriter.get().println("loadDocumentFromURL() failed with document: " + sInputFileURL); + GlobalLogWriter.println("loadDocumentFromURL() failed with document: " + sInputFileURL); throw new OfficeException("load(): failed with document" + sInputFileURL); } @@ -101,7 +101,8 @@ public class OpenOfficePostscriptCreator implements IOffice if (m_aDocument != null) { String sDocumentName = FileHelper.appendPath(m_sOutputURL, m_sBasename); - if (m_aParameterHelper.getReferenceType().toLowerCase().equals("ooo")) + if (m_aParameterHelper.getReferenceType().toLowerCase().equals("ooo") || + m_aParameterHelper.getReferenceType().toLowerCase().equals("ps") ) { String sPrintURL = sDocumentName + ".ps"; @@ -115,13 +116,13 @@ public class OpenOfficePostscriptCreator implements IOffice storeAsPDF(m_aParameterHelper, m_aDocument, sPDFURL); String sBasename = FileHelper.getBasename(sPDFURL); - FileHelper.addBasenameToIndex(m_sOutputURL, sBasename, "OOo", "pdf-export", m_sDocumentName); + FileHelper.addBasenameToIndex(m_sOutputURL, sBasename, "pdf", "pdf-export", m_sDocumentName); } else { throw new OfficeException("unknown reference type"); } - GlobalLogWriter.get().println("Close document."); + GlobalLogWriter.println("Close document."); m_aDocument.dispose(); } } @@ -147,11 +148,11 @@ public class OpenOfficePostscriptCreator implements IOffice try { sValue = AnyConverter.toString(_aValue.Value); - GlobalLogWriter.get().println("Property " + sName + ":=" + sValue); + GlobalLogWriter.println("Property " + sName + ":=" + sValue); } catch (com.sun.star.lang.IllegalArgumentException e) { - GlobalLogWriter.get().println("showProperty: can't convert a object to string."); + GlobalLogWriter.println("showProperty: can't convert a object to string. " + e.getMessage()); } } @@ -160,7 +161,7 @@ public class OpenOfficePostscriptCreator implements IOffice */ private String getDocumentType( XComponent _aDoc ) { - XModel xModel = (XModel) UnoRuntime.queryInterface( XModel.class, _aDoc); + XModel xModel = UnoRuntime.queryInterface( XModel.class, _aDoc); PropertyValue[] aArgs = xModel.getArgs(); for (int i=0;i<aArgs.length;i++) { @@ -180,7 +181,7 @@ public class OpenOfficePostscriptCreator implements IOffice private void showDocumentType( XComponent _aDoc ) { String sNameValue = getDocumentType(_aDoc); - GlobalLogWriter.get().println(" Property: '" + sNameValue); + GlobalLogWriter.println(" Property: '" + sNameValue); } /** * load a OpenOffice.org document from a given URL (_sInputURL) @@ -196,15 +197,15 @@ public class OpenOfficePostscriptCreator implements IOffice { if (_aGTA.getMultiServiceFactory() == null) { - GlobalLogWriter.get().println("MultiServiceFactory in GraphicalTestArgument not set."); + GlobalLogWriter.println("MultiServiceFactory in GraphicalTestArgument not set."); return null; } Object oDsk = _aGTA.getMultiServiceFactory().createInstance("com.sun.star.frame.Desktop"); - XDesktop aDesktop = (XDesktop)UnoRuntime.queryInterface(XDesktop.class, oDsk); + XDesktop aDesktop = UnoRuntime.queryInterface(XDesktop.class, oDsk); if (aDesktop != null) { - GlobalLogWriter.get().println("com.sun.star.frame.Desktop created."); + GlobalLogWriter.println("com.sun.star.frame.Desktop created."); // String sInputURL = aCurrentParameter.sInputURL; // String sOutputURL = aCurrentParameter.sOutputURL; // String sPrintFileURL = aCurrentParameter.sPrintToFileURL; @@ -214,7 +215,7 @@ public class OpenOfficePostscriptCreator implements IOffice // set here the loadComponentFromURL() properties // at the moment only 'Hidden' is set, so no window is opened at work - ArrayList aPropertyList = new ArrayList(); + ArrayList<PropertyValue> aPropertyList = new ArrayList<PropertyValue>(); // check which properties should set and count it. // if (_aGTA.isHidden()) @@ -253,10 +254,10 @@ public class OpenOfficePostscriptCreator implements IOffice aPropertyList.add(ReadOnly); showProperty(ReadOnly); - GlobalLogWriter.get().println(DateHelper.getDateTimeForHumanreadableLog() + " Load document"); - // GlobalLogWriter.get().flush(); + GlobalLogWriter.println(DateHelper.getDateTimeForHumanreadableLog() + " Load document"); + // GlobalLogWriter.flush(); - XComponentLoader aCompLoader = (XComponentLoader) UnoRuntime.queryInterface( XComponentLoader.class, aDesktop); + XComponentLoader aCompLoader = UnoRuntime.queryInterface( XComponentLoader.class, aDesktop); // XComponent aDoc = null; @@ -265,30 +266,31 @@ public class OpenOfficePostscriptCreator implements IOffice _aGTA.getPerformance().stopTime(PerformanceContainer.Load); if (aDoc != null) { - GlobalLogWriter.get().println(DateHelper.getDateTimeForHumanreadableLog() + " Load document done."); + GlobalLogWriter.println(DateHelper.getDateTimeForHumanreadableLog() + " Load document done."); showDocumentType(aDoc); _aGTA.setDocumentType(getDocumentType(aDoc)); +// TODO: TimeHelper.waitInSeconds(20, "Wait after load document. Maybe helps due to layouting problems."); } else { - GlobalLogWriter.get().println(" Load document failed."); + GlobalLogWriter.println(" Load document failed."); if (_aGTA.getImportFilterName() != null && _aGTA.getImportFilterName().length() > 0) { - GlobalLogWriter.get().println(" Please check FilterName := '" + _aGTA.getImportFilterName() + "'"); + GlobalLogWriter.println(" Please check FilterName := '" + _aGTA.getImportFilterName() + "'"); } - GlobalLogWriter.get().println(""); + GlobalLogWriter.println(""); } } else { - GlobalLogWriter.get().println("com.sun.star.frame.Desktop failed."); + GlobalLogWriter.println("com.sun.star.frame.Desktop failed."); } } catch ( com.sun.star.uno.Exception e ) { // Some exception occures.FAILED - GlobalLogWriter.get().println("UNO Exception caught."); - GlobalLogWriter.get().println("Message: " + e.getMessage()); + GlobalLogWriter.println("UNO Exception caught."); + GlobalLogWriter.println("Message: " + e.getMessage()); e.printStackTrace(); aDoc = null; } @@ -298,11 +300,11 @@ public class OpenOfficePostscriptCreator implements IOffice private boolean exportToPDF(XComponent _xComponent, String _sDestinationName) { XServiceInfo xServiceInfo = - (XServiceInfo) UnoRuntime.queryInterface( + UnoRuntime.queryInterface( XServiceInfo.class, _xComponent ); - ArrayList aPropertyList = new ArrayList(); + ArrayList<PropertyValue> aPropertyList = new ArrayList<PropertyValue>(); PropertyValue aFiltername = new PropertyValue(); aFiltername.Name = "FilterName"; aFiltername.Value = getFilterName_forPDF(xServiceInfo); @@ -310,18 +312,19 @@ public class OpenOfficePostscriptCreator implements IOffice showProperty(aFiltername); boolean bWorked = true; +// TODO: TimeHelper.waitInSeconds(20, "Wait before storeToURL. Maybe helps due to layouting problems."); try { XStorable store = - (XStorable) UnoRuntime.queryInterface( + UnoRuntime.queryInterface( XStorable.class, _xComponent ); store.storeToURL(_sDestinationName, PropertyHelper.createPropertyValueArrayFormArrayList(aPropertyList)); } catch (com.sun.star.io.IOException e) { - GlobalLogWriter.get().println("IO Exception caught."); - GlobalLogWriter.get().println("Message: " + e.getMessage()); + GlobalLogWriter.println("IO Exception caught."); + GlobalLogWriter.println("Message: " + e.getMessage()); bWorked = false; } @@ -383,13 +386,13 @@ public class OpenOfficePostscriptCreator implements IOffice // // if (aDoc == null) // { -// GlobalLogWriter.get().println("Can't load document."); +// GlobalLogWriter.println("Can't load document."); // return bBack; // } // bBack = storeAsPDF(_aGTA, aDoc, _sOutputURL); // FileHelper.createInfoFile(_sOutputURL, _aGTA, "as pdf"); // -// GlobalLogWriter.get().println("Close document."); +// GlobalLogWriter.println("Close document."); // aDoc.dispose(); // return bBack; // } @@ -406,7 +409,7 @@ public class OpenOfficePostscriptCreator implements IOffice if (!bBack) { - GlobalLogWriter.get().println("Can't store document as PDF."); + GlobalLogWriter.println("Can't store document as PDF."); // bBack = false; throw new OfficeException("Can't store document as PDF"); } @@ -444,17 +447,17 @@ public class OpenOfficePostscriptCreator implements IOffice // { // // don't store document // // input and output are equal OR -// GlobalLogWriter.get().println("Warning: Inputpath and Outputpath are equal. Document will not stored again."); +// GlobalLogWriter.println("Warning: Inputpath and Outputpath are equal. Document will not stored again."); // disallowStore(); // } // bBack = impl_printToFileWithOOo(_aGTA, aDoc, _sOutputURL, _sPrintFileURL); // -// GlobalLogWriter.get().println("Close document."); +// GlobalLogWriter.println("Close document."); // aDoc.dispose(); // } // else // { -// GlobalLogWriter.get().println("loadDocumentFromURL() failed with document: " + _sInputURL); +// GlobalLogWriter.println("loadDocumentFromURL() failed with document: " + _sInputURL); // } // return bBack; // } @@ -471,7 +474,7 @@ public class OpenOfficePostscriptCreator implements IOffice boolean bFailed = true; // always be a pessimist, if (_aDoc == null) { - GlobalLogWriter.get().println("No document is given."); + GlobalLogWriter.println("No document is given."); return bBack; } @@ -482,27 +485,27 @@ public class OpenOfficePostscriptCreator implements IOffice if (isStoreAllowed()) { // store the document in an other directory - XStorable aStorable = (XStorable) UnoRuntime.queryInterface( XStorable.class, _aDoc); + XStorable aStorable = UnoRuntime.queryInterface( XStorable.class, _aDoc); if (aStorable != null) { PropertyValue [] szEmptyArgs = new PropertyValue [0]; - GlobalLogWriter.get().println(DateHelper.getDateTimeForHumanreadableLog() + " Store document."); + GlobalLogWriter.println(DateHelper.getDateTimeForHumanreadableLog() + " Store document."); _aGTA.getPerformance().startTime(PerformanceContainer.Store); aStorable.storeAsURL(_sOutputURL, szEmptyArgs); _aGTA.getPerformance().stopTime(PerformanceContainer.Store); - GlobalLogWriter.get().println(DateHelper.getDateTimeForHumanreadableLog() + " Store document done."); - TimeHelper.waitInSeconds(1, "After store as URL to:" + _sOutputURL); - GlobalLogWriter.get().println("Reload stored file test."); + GlobalLogWriter.println(DateHelper.getDateTimeForHumanreadableLog() + " Store document done."); + // TimeHelper.waitInSeconds(1, "After store as URL to:" + _sOutputURL); + GlobalLogWriter.println("Reload stored file test."); XComponent aDoc = loadFromURL(_aGTA, _sOutputURL); if (aDoc == null) { - GlobalLogWriter.get().println("Reload stored file test failed, can't reload file: " + _sOutputURL); + GlobalLogWriter.println("Reload stored file test failed, can't reload file: " + _sOutputURL); } else { - XCloseable xClose = (XCloseable)UnoRuntime.queryInterface(XCloseable.class, aDoc); + XCloseable xClose = UnoRuntime.queryInterface(XCloseable.class, aDoc); if (xClose != null) { xClose.close(true); @@ -511,7 +514,7 @@ public class OpenOfficePostscriptCreator implements IOffice { aDoc.dispose(); } - TimeHelper.waitInSeconds(1, "after close temp document"); + // TimeHelper.waitInSeconds(1, "after close temp document"); } } } @@ -528,8 +531,8 @@ public class OpenOfficePostscriptCreator implements IOffice catch ( com.sun.star.uno.Exception e ) { // Some exception occures.FAILED - GlobalLogWriter.get().println("UNO Exception caught."); - GlobalLogWriter.get().println("Message: " + e.getMessage()); + GlobalLogWriter.println("UNO Exception caught."); + GlobalLogWriter.println("Message: " + e.getMessage()); e.printStackTrace(); bBack = false; @@ -541,8 +544,8 @@ public class OpenOfficePostscriptCreator implements IOffice // System.out.println("Document loaded."); // Change Pagesettings to DIN A4 - GlobalLogWriter.get().println(DateHelper.getDateTimeForHumanreadableLog() + " Print document."); - XPrintable aPrintable = (XPrintable) UnoRuntime.queryInterface( XPrintable.class, _aDoc); + GlobalLogWriter.println(DateHelper.getDateTimeForHumanreadableLog() + " Print document."); + XPrintable aPrintable = UnoRuntime.queryInterface( XPrintable.class, _aDoc); if (aPrintable != null) { // System.out.println(" Set PaperFormat to DIN A4"); @@ -566,14 +569,14 @@ public class OpenOfficePostscriptCreator implements IOffice { if (_aGTA.getPrinterName() != null) { - ArrayList aPropertyList = new ArrayList(); + ArrayList<PropertyValue> aPropertyList = new ArrayList<PropertyValue>(); // PropertyValue [] aPrintProps = new PropertyValue[1]; PropertyValue Arg = new PropertyValue(); Arg.Name = "Name"; Arg.Value = _aGTA.getPrinterName(); aPropertyList.add(Arg); showProperty(Arg); - // GlobalLogWriter.get().println("Printername is not null, so set to " + _aGTA.getPrinterName()); + // GlobalLogWriter.println("Printername is not null, so set to " + _aGTA.getPrinterName()); aPrintable.setPrinter(PropertyHelper.createPropertyValueArrayFormArrayList(aPropertyList)); } } @@ -590,21 +593,21 @@ public class OpenOfficePostscriptCreator implements IOffice // int nPropsCount = 0; // If we are a SpreadSheet (calc), we need to set PrintAllSheets property to 'true' - XServiceInfo xServiceInfo = (XServiceInfo) UnoRuntime.queryInterface( XServiceInfo.class, _aDoc ); + XServiceInfo xServiceInfo = UnoRuntime.queryInterface( XServiceInfo.class, _aDoc ); if ( xServiceInfo.supportsService( "com.sun.star.sheet.SpreadsheetDocument" ) ) { XMultiServiceFactory xMSF = _aGTA.getMultiServiceFactory(); Object aSettings = xMSF.createInstance( "com.sun.star.sheet.GlobalSheetSettings" ); if (aSettings != null) { - XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface( XPropertySet.class, aSettings ); + XPropertySet xPropSet = UnoRuntime.queryInterface( XPropertySet.class, aSettings ); xPropSet.setPropertyValue( "PrintAllSheets", new Boolean( true ) ); - GlobalLogWriter.get().println("PrintAllSheets := true"); + GlobalLogWriter.println("PrintAllSheets := true"); } } - ArrayList aPrintProps = new ArrayList(); - // GlobalLogWriter.get().println("Property FileName:=" + _sPrintFileURL); + ArrayList<PropertyValue> aPrintProps = new ArrayList<PropertyValue>(); + // GlobalLogWriter.println("Property FileName:=" + _sPrintFileURL); // PropertyValue [] aPrintProps = new PropertyValue[nProperties]; PropertyValue Arg = new PropertyValue(); @@ -639,13 +642,13 @@ public class OpenOfficePostscriptCreator implements IOffice showProperty(Arg); } - // GlobalLogWriter.get().println("Start printing."); + // GlobalLogWriter.println("Start printing."); _aGTA.getPerformance().startTime(PerformanceContainer.Print); aPrintable.print(PropertyHelper.createPropertyValueArrayFormArrayList(aPrintProps)); TimeHelper.waitInSeconds(1, "Start waiting for print ready."); - GlobalLogWriter.get().println("Wait until document is printed."); + GlobalLogWriter.println("Wait until document is printed."); boolean isBusy = true; int nPrintCount = 0; while (isBusy) @@ -663,21 +666,22 @@ public class OpenOfficePostscriptCreator implements IOffice if (nPrintCount > 3600) { // we will never wait >1h until print is ready! - GlobalLogWriter.get().println("ERROR: Cancel print due to too long wait."); + GlobalLogWriter.println("ERROR: Cancel print due to too long wait."); throw new com.sun.star.uno.Exception("Convwatch exception, wait too long for printing."); } } - // TimeHelper.waitInSeconds(40, "Start waiting after print ready."); +// TODO: +// TimeHelper.waitInSeconds(40, "Start waiting after print ready."); _aGTA.getPerformance().stopTime(PerformanceContainer.Print); - GlobalLogWriter.get().println(DateHelper.getDateTimeForHumanreadableLog() + " Print document done."); + GlobalLogWriter.println(DateHelper.getDateTimeForHumanreadableLog() + " Print document done."); // Create a .info file near the printed '.ps' or '.prn' file. FileHelper.createInfoFile(_sPrintFileURL, _aGTA); } else { - GlobalLogWriter.get().println("Can't get XPrintable interface."); + GlobalLogWriter.println("Can't get XPrintable interface."); } bFailed = false; bBack = true; @@ -685,8 +689,8 @@ public class OpenOfficePostscriptCreator implements IOffice catch ( com.sun.star.uno.Exception e ) { // Some exception occures.FAILED - GlobalLogWriter.get().println("UNO Exception caught."); - GlobalLogWriter.get().println("Message: " + e.getMessage()); + GlobalLogWriter.println("UNO Exception caught."); + GlobalLogWriter.println("Message: " + e.getMessage()); e.printStackTrace(); bBack = false; @@ -694,17 +698,20 @@ public class OpenOfficePostscriptCreator implements IOffice if (bFailed == true) { - GlobalLogWriter.get().println("convwatch.OfficePrint: FAILED"); + GlobalLogWriter.println("convwatch.OfficePrint: FAILED"); } else { - GlobalLogWriter.get().println("convwatch.OfficePrint: OK"); + GlobalLogWriter.println("convwatch.OfficePrint: OK"); } return bBack; } /** + * @param _aGTA + * @param _sAbsoluteOutputPath + * @param _sAbsoluteInputFile * @return true, if the reference (*.prrn file) based on given output path and given input path exist. * If OVERWRITE_REFERENCE is set, always return false. */ @@ -744,7 +751,7 @@ public class OpenOfficePostscriptCreator implements IOffice String sAbsolutePrintFilename = FileHelper.appendPath(sOutputPath, sPrintFilename + ".prn"); if (FileHelper.exists(sAbsolutePrintFilename) && _aGTA.getOverwrite() == false) { - GlobalLogWriter.get().println("Reference already exist, don't overwrite. Set " + PropertyName.DOC_COMPARATOR_OVERWRITE_REFERENCE + "=true to force overwrite."); + GlobalLogWriter.println("Reference already exist, don't overwrite. Set " + PropertyName.DOC_COMPARATOR_OVERWRITE_REFERENCE + "=true to force overwrite."); return true; } return false; @@ -797,7 +804,7 @@ public class OpenOfficePostscriptCreator implements IOffice // String sAbsolutePrintFilename = sOutputPath + fs + sPrintFilename + ".prn"; // if (FileHelper.exists(sAbsolutePrintFilename) && _aGTA.getOverwrite() == false) // { -// GlobalLogWriter.get().println("Reference already exist, don't overwrite. Set " + PropertyName.DOC_COMPARATOR_OVERWRITE_REFERENCE + "=true to force overwrite."); +// GlobalLogWriter.println("Reference already exist, don't overwrite. Set " + PropertyName.DOC_COMPARATOR_OVERWRITE_REFERENCE + "=true to force overwrite."); // return true; // } // @@ -816,7 +823,7 @@ public class OpenOfficePostscriptCreator implements IOffice // } // else // { -// GlobalLogWriter.get().println("OfficePrint.buildreference(): Unknown print type."); +// GlobalLogWriter.println("OfficePrint.buildreference(): Unknown print type."); // return false; // } // return printToFile(_aGTA, sInputFileURL, sOutputFileURL, sPrintFileURL); @@ -845,14 +852,14 @@ public class OpenOfficePostscriptCreator implements IOffice // } // else if (_aGTA.getReferenceType().toLowerCase().equals("pdf")) // { -// GlobalLogWriter.get().println("USE PDF AS EXPORT FORMAT."); +// GlobalLogWriter.println("USE PDF AS EXPORT FORMAT."); // bBack = storeAsPDF(_aGTA, _sInputFileURL, _sPrintFileURL); // } // else if (_aGTA.getReferenceType().toLowerCase().equals("msoffice")) // { // if (MSOfficePostscriptCreator.isMSOfficeDocumentFormat(_sInputFileURL)) // { -// GlobalLogWriter.get().println("USE MSOFFICE AS EXPORT FORMAT."); +// GlobalLogWriter.println("USE MSOFFICE AS EXPORT FORMAT."); // MSOfficePostscriptCreator a = new MSOfficePostscriptCreator(); // try // { @@ -862,19 +869,19 @@ public class OpenOfficePostscriptCreator implements IOffice // catch(OfficeException e) // { // e.printStackTrace(); -// GlobalLogWriter.get().println(e.getMessage()); +// GlobalLogWriter.println(e.getMessage()); // throw new OfficeException("Exception caught. Problem with MSOffice printer methods."); // } // catch(java.io.IOException e) // { -// GlobalLogWriter.get().println(e.getMessage()); +// GlobalLogWriter.println(e.getMessage()); // throw new OfficeException("IOException caught. Problem with MSOffice printer methods."); // } // bBack = true; // } // else // { -// GlobalLogWriter.get().println("This document type is not recognized as MSOffice format, as default fallback StarOffice/OpenOffice.org instead is used."); +// GlobalLogWriter.println("This document type is not recognized as MSOffice format, as default fallback StarOffice/OpenOffice.org instead is used."); // bBack = printToFileWithOOo(_aGTA, _sInputFileURL, _sOutputFileURL, _sPrintFileURL); // } // } @@ -898,24 +905,24 @@ public class OpenOfficePostscriptCreator implements IOffice if (_xMSF == null) { - GlobalLogWriter.get().println("MultiServiceFactory not set."); + GlobalLogWriter.println("MultiServiceFactory not set."); return; } XTypeDetection aTypeDetection = null; try { Object oObj = _xMSF.createInstance("com.sun.star.document.TypeDetection"); - aTypeDetection = (XTypeDetection)UnoRuntime.queryInterface(XTypeDetection.class, oObj); + aTypeDetection = UnoRuntime.queryInterface(XTypeDetection.class, oObj); } catch(com.sun.star.uno.Exception e) { - GlobalLogWriter.get().println("Can't get com.sun.star.document.TypeDetection."); + GlobalLogWriter.println("Can't get com.sun.star.document.TypeDetection."); return; } if (aTypeDetection != null) { String sType = aTypeDetection.queryTypeByURL(_sInputURL); - GlobalLogWriter.get().println("Type is: " + sType); + GlobalLogWriter.println("Type is: " + sType); } } @@ -931,7 +938,7 @@ public class OpenOfficePostscriptCreator implements IOffice if (_xMSF == null) { - GlobalLogWriter.get().println("MultiServiceFactory not set."); + GlobalLogWriter.println("MultiServiceFactory not set."); return null; } // XFilterFactory aFilterFactory = null; @@ -942,12 +949,12 @@ public class OpenOfficePostscriptCreator implements IOffice } catch(com.sun.star.uno.Exception e) { - GlobalLogWriter.get().println("Can't get com.sun.star.document.FilterFactory."); + GlobalLogWriter.println("Can't get com.sun.star.document.FilterFactory."); return null; } if (aObj != null) { - XNameAccess aNameAccess = (XNameAccess)UnoRuntime.queryInterface(XNameAccess.class, aObj); + XNameAccess aNameAccess = UnoRuntime.queryInterface(XNameAccess.class, aObj); if (aNameAccess != null) { @@ -965,7 +972,7 @@ public class OpenOfficePostscriptCreator implements IOffice if (! aNameAccess.hasByName(_sFilterName)) { - GlobalLogWriter.get().println("FilterFactory.hasByName() says there exist no '" + _sFilterName + "'" ); + GlobalLogWriter.println("FilterFactory.hasByName() says there exist no '" + _sFilterName + "'" ); return null; } @@ -993,17 +1000,17 @@ public class OpenOfficePostscriptCreator implements IOffice } else { - GlobalLogWriter.get().println("There are no elements for FilterName '" + _sFilterName + "'"); + GlobalLogWriter.println("There are no elements for FilterName '" + _sFilterName + "'"); return null; } } catch (com.sun.star.container.NoSuchElementException e) { - GlobalLogWriter.get().println("NoSuchElementException caught. " + e.getMessage()); + GlobalLogWriter.println("NoSuchElementException caught. " + e.getMessage()); } catch (com.sun.star.lang.WrappedTargetException e) { - GlobalLogWriter.get().println("WrappedTargetException caught. " + e.getMessage()); + GlobalLogWriter.println("WrappedTargetException caught. " + e.getMessage()); } } } @@ -1022,7 +1029,7 @@ public class OpenOfficePostscriptCreator implements IOffice if (_xMSF == null) { - GlobalLogWriter.get().println("MultiServiceFactory not set."); + GlobalLogWriter.println("MultiServiceFactory not set."); return null; } // XFilterFactory aFilterFactory = null; @@ -1033,17 +1040,17 @@ public class OpenOfficePostscriptCreator implements IOffice } catch(com.sun.star.uno.Exception e) { - GlobalLogWriter.get().println("Can't get com.sun.star.document.FilterFactory."); + GlobalLogWriter.println("Can't get com.sun.star.document.FilterFactory."); return null; } if (aObj != null) { - XNameAccess aNameAccess = (XNameAccess)UnoRuntime.queryInterface(XNameAccess.class, aObj); + XNameAccess aNameAccess = UnoRuntime.queryInterface(XNameAccess.class, aObj); if (aNameAccess != null) { if (! aNameAccess.hasByName(_sFilterName)) { - GlobalLogWriter.get().println("FilterFactory.hasByName() says there exist no '" + _sFilterName + "'" ); + GlobalLogWriter.println("FilterFactory.hasByName() says there exist no '" + _sFilterName + "'" ); return null; } @@ -1071,17 +1078,17 @@ public class OpenOfficePostscriptCreator implements IOffice } else { - GlobalLogWriter.get().println("There are no elements for FilterName '" + _sFilterName + "'"); + GlobalLogWriter.println("There are no elements for FilterName '" + _sFilterName + "'"); return null; } } catch (com.sun.star.container.NoSuchElementException e) { - GlobalLogWriter.get().println("NoSuchElementException caught. " + e.getMessage()); + GlobalLogWriter.println("NoSuchElementException caught. " + e.getMessage()); } catch (com.sun.star.lang.WrappedTargetException e) { - GlobalLogWriter.get().println("WrappedTargetException caught. " + e.getMessage()); + GlobalLogWriter.println("WrappedTargetException caught. " + e.getMessage()); } } } @@ -1099,23 +1106,23 @@ public class OpenOfficePostscriptCreator implements IOffice if (_xMSF == null) { - GlobalLogWriter.get().println("MultiServiceFactory not set."); + GlobalLogWriter.println("MultiServiceFactory not set."); return null; } XTypeDetection aTypeDetection = null; try { Object oObj = _xMSF.createInstance("com.sun.star.document.TypeDetection"); - aTypeDetection = (XTypeDetection)UnoRuntime.queryInterface(XTypeDetection.class, oObj); + aTypeDetection = UnoRuntime.queryInterface(XTypeDetection.class, oObj); } catch(com.sun.star.uno.Exception e) { - GlobalLogWriter.get().println("Can't get com.sun.star.document.TypeDetection."); + GlobalLogWriter.println("Can't get com.sun.star.document.TypeDetection."); return null; } if (aTypeDetection != null) { - XNameAccess aNameAccess = (XNameAccess)UnoRuntime.queryInterface(XNameAccess.class, aTypeDetection); + XNameAccess aNameAccess = UnoRuntime.queryInterface(XNameAccess.class, aTypeDetection); if (aNameAccess != null) { @@ -1128,7 +1135,7 @@ public class OpenOfficePostscriptCreator implements IOffice if (! aNameAccess.hasByName(_sInternalFilterName)) { - GlobalLogWriter.get().println("TypeDetection.hasByName() says there exist no '" + _sInternalFilterName + "'" ); + GlobalLogWriter.println("TypeDetection.hasByName() says there exist no '" + _sInternalFilterName + "'" ); return null; } @@ -1148,15 +1155,15 @@ public class OpenOfficePostscriptCreator implements IOffice if (aPropertyValue.Name.equals("Extensions")) { aExtensions = (String[])aPropertyValue.Value; - GlobalLogWriter.get().println(" Possible extensions are: " + String.valueOf(aExtensions.length)); + GlobalLogWriter.println(" Possible extensions are: " + String.valueOf(aExtensions.length)); if (aExtensions.length > 0) { for (int j=0;j<aExtensions.length;j++) { - GlobalLogWriter.get().println(" " + aExtensions[j]); + GlobalLogWriter.println(" " + aExtensions[j]); } sExtension = aExtensions[0]; - GlobalLogWriter.get().println(""); + GlobalLogWriter.println(""); } } } @@ -1164,17 +1171,17 @@ public class OpenOfficePostscriptCreator implements IOffice } else { - GlobalLogWriter.get().println("There are no elements for FilterName '" + _sInternalFilterName + "'"); + GlobalLogWriter.println("There are no elements for FilterName '" + _sInternalFilterName + "'"); return null; } } catch (com.sun.star.container.NoSuchElementException e) { - GlobalLogWriter.get().println("NoSuchElementException caught. " + e.getMessage()); + GlobalLogWriter.println("NoSuchElementException caught. " + e.getMessage()); } catch (com.sun.star.lang.WrappedTargetException e) { - GlobalLogWriter.get().println("WrappedTargetException caught. " + e.getMessage()); + GlobalLogWriter.println("WrappedTargetException caught. " + e.getMessage()); } } } @@ -1187,7 +1194,7 @@ public class OpenOfficePostscriptCreator implements IOffice XMultiServiceFactory xMSF = _aGTA.getMultiServiceFactory(); if (xMSF == null) { - GlobalLogWriter.get().println("MultiServiceFactory in GraphicalTestArgument not set."); + GlobalLogWriter.println("MultiServiceFactory in GraphicalTestArgument not set."); return; } @@ -1196,33 +1203,33 @@ public class OpenOfficePostscriptCreator implements IOffice XComponent aDoc = loadFromURL( _aGTA, sInputURL); if (aDoc == null) { - GlobalLogWriter.get().println("Can't load document '"+ sInputURL + "'"); + GlobalLogWriter.println("Can't load document '"+ sInputURL + "'"); return; } if (_sOutputPath == null) { - GlobalLogWriter.get().println("Outputpath not set."); + GlobalLogWriter.println("Outputpath not set."); return; } if (! isStoreAllowed()) { - GlobalLogWriter.get().println("It's not allowed to store, check Input/Output path."); + GlobalLogWriter.println("It's not allowed to store, check Input/Output path."); return; } // TODO: Do we need to wait? // TimeHelper.waitInSeconds(1, "wait after loadFromURL."); - XServiceInfo xServiceInfo = (XServiceInfo) UnoRuntime.queryInterface( XServiceInfo.class, aDoc ); + XServiceInfo xServiceInfo = UnoRuntime.queryInterface( XServiceInfo.class, aDoc ); // String sFilter = getFilterName_forExcel(xServiceInfo); // System.out.println("Filter is " + sFilter); // store the document in an other directory - XStorable xStorable = (XStorable) UnoRuntime.queryInterface( XStorable.class, aDoc); + XStorable xStorable = UnoRuntime.queryInterface( XStorable.class, aDoc); if (xStorable == null) { - GlobalLogWriter.get().println("com.sun.star.frame.XStorable is null"); + GlobalLogWriter.println("com.sun.star.frame.XStorable is null"); return; } @@ -1238,7 +1245,7 @@ public class OpenOfficePostscriptCreator implements IOffice // initialize PropertyArray // PropertyValue [] aStoreProps = new PropertyValue[ nPropertyCount ]; // int nPropertyIndex = 0; - ArrayList aPropertyList = new ArrayList(); + ArrayList<PropertyValue> aPropertyList = new ArrayList<PropertyValue>(); String sExtension = ""; @@ -1247,22 +1254,22 @@ public class OpenOfficePostscriptCreator implements IOffice String sInternalFilterName = getInternalFilterName(sFilterName, xMSF); String sServiceName = getServiceNameFromFilterName(sFilterName, xMSF); - GlobalLogWriter.get().println("Filter detection:"); + GlobalLogWriter.println("Filter detection:"); // check if service name from file filter is the same as from the loaded document boolean bServiceFailed = false; if (sServiceName == null || sInternalFilterName == null) { - GlobalLogWriter.get().println("Given FilterName '" + sFilterName + "' seems to be unknown."); + GlobalLogWriter.println("Given FilterName '" + sFilterName + "' seems to be unknown."); bServiceFailed = true; } if (! xServiceInfo.supportsService(sServiceName)) { - GlobalLogWriter.get().println("Service from FilterName '" + sServiceName + "' is not supported by loaded document."); + GlobalLogWriter.println("Service from FilterName '" + sServiceName + "' is not supported by loaded document."); bServiceFailed = true; } if (bServiceFailed == true) { - GlobalLogWriter.get().println("Please check '" + PropertyName.DOC_CONVERTER_EXPORT_FILTER_NAME + "' in the property file."); + GlobalLogWriter.println("Please check '" + PropertyName.DOC_CONVERTER_EXPORT_FILTER_NAME + "' in the property file."); return; } @@ -1273,7 +1280,7 @@ public class OpenOfficePostscriptCreator implements IOffice sExtension = getFileExtension(sInternalFilterName, xMSF); if (sExtension == null) { - GlobalLogWriter.get().println("Can't found an extension for filtername, take it from the source."); + GlobalLogWriter.println("Can't found an extension for filtername, take it from the source."); } } @@ -1283,7 +1290,7 @@ public class OpenOfficePostscriptCreator implements IOffice // aStoreProps[nPropertyIndex ++] = Arg; aPropertyList.add(Arg); showProperty(Arg); - GlobalLogWriter.get().println("FilterName is set to: " + sFilterName); + GlobalLogWriter.println("FilterName is set to: " + sFilterName); } String sOutputURL = ""; @@ -1311,38 +1318,41 @@ public class OpenOfficePostscriptCreator implements IOffice if (FileHelper.exists(sOutputFile) && _aGTA.getOverwrite() == false) { - GlobalLogWriter.get().println("File already exist, don't overwrite. Set " + PropertyName.DOC_COMPARATOR_OVERWRITE_REFERENCE + "=true to force overwrite."); + GlobalLogWriter.println("File already exist, don't overwrite. Set " + PropertyName.DOC_COMPARATOR_OVERWRITE_REFERENCE + "=true to force overwrite."); return; } sOutputURL = URLHelper.getFileURLFromSystemPath(sOutputFile); - GlobalLogWriter.get().println("Store document as '" + sOutputURL + "'"); + GlobalLogWriter.println("Store document as '" + sOutputURL + "'"); xStorable.storeAsURL(sOutputURL, PropertyHelper.createPropertyValueArrayFormArrayList(aPropertyList)); - GlobalLogWriter.get().println("Document stored."); + GlobalLogWriter.println("Document stored."); } catch (com.sun.star.io.IOException e) { - GlobalLogWriter.get().println("Can't store document '" + sOutputURL + "'. Message is :'" + e.getMessage() + "'"); + GlobalLogWriter.println("Can't store document '" + sOutputURL + "'. Message is :'" + e.getMessage() + "'"); } // TODO: Do we need to wait? // TimeHelper.waitInSeconds(1, "unknown in OfficePrint.convertDocument()"); } - - private boolean shouldOfficeStart() - { - String sNoOffice = (String)m_aParameterHelper.getTestParameters().get( "NoOffice" ); - if (sNoOffice != null) - { - if (sNoOffice.toLowerCase().startsWith("t") || sNoOffice.toLowerCase().startsWith("y")) - { - return false; - } - } - return true; - } + /** + * + * @return false, if 'NoOffice=yes' is given + */ +// private boolean shouldOfficeStart() +// { +// String sNoOffice = (String)m_aParameterHelper.getTestParameters().get( "NoOffice" ); +// if (sNoOffice != null) +// { +// if (sNoOffice.toLowerCase().startsWith("t") || sNoOffice.toLowerCase().startsWith("y")) +// { +// return false; +// } +// } +// return true; +// } OfficeProvider m_aProvider = null; private void startOffice() @@ -1370,7 +1380,7 @@ public class OpenOfficePostscriptCreator implements IOffice // Watcher Object is need in log object to give a simple way to say if a running office is alive. // As long as a log comes, it pings the Watcher and says the office is alive, if not an // internal counter increase and at a given point (300 seconds) the office is killed. - GlobalLogWriter.get().println("Set office watcher"); + GlobalLogWriter.println("Set office watcher"); if (GlobalLogWriter.get().getWatcher() == null) { OfficeWatcher aWatcher = (OfficeWatcher)m_aParameterHelper.getTestParameters().get("Watcher"); @@ -1383,7 +1393,11 @@ public class OpenOfficePostscriptCreator implements IOffice // Office shutdown if (m_aProvider != null) { - m_aProvider.closeExistingOffice(m_aParameterHelper.getTestParameters(), true); + String sAppExecCmd = (String)m_aParameterHelper.getTestParameters().get("AppExecutionCommand"); + if (sAppExecCmd != null && sAppExecCmd.length() > 0) + { + m_aProvider.closeExistingOffice(m_aParameterHelper.getTestParameters(), true); + } // if (OSHelper.isWindows()) // { // aSemaphore.V(aSemaphore.getSemaphoreFile()); diff --git a/qadevOOo/runner/graphical/ParameterHelper.java b/qadevOOo/runner/graphical/ParameterHelper.java index e3545a56e73b..598ee6c53007 100644 --- a/qadevOOo/runner/graphical/ParameterHelper.java +++ b/qadevOOo/runner/graphical/ParameterHelper.java @@ -193,7 +193,7 @@ public class ParameterHelper String sReferenceType = (String)getTestParameters().get( PropertyName.DOC_COMPARATOR_REFERENCE_TYPE ); if (sReferenceType == null || sReferenceType.length() == 0) { - m_sReferenceType = "OOo"; + m_sReferenceType = "ps"; } else { @@ -241,6 +241,7 @@ public class ParameterHelper /** * Helper function to get the buildid of the current used OpenOffice.org * out of the AppExecutionCommand the build ID + * @return */ public String getBuildID() { @@ -265,11 +266,12 @@ public class ParameterHelper // check if MultiServiceFactory is given if (getReferenceType().toLowerCase().equals("pdf") || + getReferenceType().toLowerCase().equals("ps") || getReferenceType().toLowerCase().equals("ooo")) { if (xMSF == null) { - GlobalLogWriter.get().println("ERROR! MultiServiceFactory not given."); + GlobalLogWriter.println("ERROR! MultiServiceFactory not given."); } } return xMSF; @@ -417,5 +419,15 @@ public class ParameterHelper return m_sHTMLPrefix; } + public boolean createSmallPictures() + { + // boolean bCreateSmallPictures = true; + boolean bNoSmallPictures = m_aCurrentParams.getBool( PropertyName.NO_SMALL_PICTURES); + if (bNoSmallPictures == true) + { + return false; + } + return true; + } } diff --git a/qadevOOo/runner/graphical/PerformanceContainer.java b/qadevOOo/runner/graphical/PerformanceContainer.java index c31d1efb79db..ab3b292926e5 100644 --- a/qadevOOo/runner/graphical/PerformanceContainer.java +++ b/qadevOOo/runner/graphical/PerformanceContainer.java @@ -59,7 +59,7 @@ public class PerformanceContainer /* extends *//* implements */ { { if (_nCurrentTimer == 0) { - GlobalLogWriter.get().println("Forgotten to initialise a start timer."); + GlobalLogWriter.println("Forgotten to initialise a start timer."); return 0; } long nMeanTime = System.currentTimeMillis(); @@ -160,7 +160,7 @@ public class PerformanceContainer /* extends *//* implements */ { } catch (NumberFormatException e) { - GlobalLogWriter.get().println("Can't convert string to double " + _sStr); + GlobalLogWriter.println("Can't convert string to double " + _sStr); } return nValue; } @@ -185,7 +185,7 @@ public class PerformanceContainer /* extends *//* implements */ { File aFile = new File(sFilename); if (! aFile.exists()) { - GlobalLogWriter.get().println("couldn't find file " + sFilename); + GlobalLogWriter.println("couldn't find file " + sFilename); return; } @@ -236,13 +236,13 @@ public class PerformanceContainer /* extends *//* implements */ { } catch (java.io.FileNotFoundException fne) { - GlobalLogWriter.get().println("couldn't open file " + sFilename); - GlobalLogWriter.get().println("Message: " + fne.getMessage()); + GlobalLogWriter.println("couldn't open file " + sFilename); + GlobalLogWriter.println("Message: " + fne.getMessage()); } catch (java.io.IOException ie) { - GlobalLogWriter.get().println("Exception while reading file " + sFilename); - GlobalLogWriter.get().println("Message: " + ie.getMessage()); + GlobalLogWriter.println("Exception while reading file " + sFilename); + GlobalLogWriter.println("Message: " + ie.getMessage()); } try { @@ -250,8 +250,8 @@ public class PerformanceContainer /* extends *//* implements */ { } catch (java.io.IOException ie) { - GlobalLogWriter.get().println("Couldn't close file " + sFilename); - GlobalLogWriter.get().println("Message: " + ie.getMessage()); + GlobalLogWriter.println("Couldn't close file " + sFilename); + GlobalLogWriter.println("Message: " + ie.getMessage()); } } diff --git a/qadevOOo/runner/graphical/PropertyName.java b/qadevOOo/runner/graphical/PropertyName.java index 8ca2835e8086..729fd0c33c38 100644 --- a/qadevOOo/runner/graphical/PropertyName.java +++ b/qadevOOo/runner/graphical/PropertyName.java @@ -69,5 +69,5 @@ public interface PropertyName // final public static String DB_CONNECTION_STRING = "DB_CONNECTION_STRING"; // final public static String CHECK_NEED_TOOLS = "CHECK_NEED_TOOLS"; // final public static String CREATE_DEFAULT = "CREATE_DEFAULT_REFERENCE"; - + final public static String NO_SMALL_PICTURES = "NoSmallPictures"; } diff --git a/qadevOOo/runner/graphical/TimeHelper.java b/qadevOOo/runner/graphical/TimeHelper.java index d0180d82e423..057f9cd19494 100644 --- a/qadevOOo/runner/graphical/TimeHelper.java +++ b/qadevOOo/runner/graphical/TimeHelper.java @@ -29,6 +29,8 @@ package graphical; +import java.util.Calendar; + /** * * @author ll93751 @@ -42,9 +44,48 @@ public class TimeHelper */ static void waitInSeconds(int _nSeconds, String _sReason) { - GlobalLogWriter.get().println("Wait " + String.valueOf(_nSeconds) + " sec. Reason: " + _sReason); + GlobalLogWriter.println("Wait 0.25 * " + String.valueOf(_nSeconds) + " sec. Reason: " + _sReason); try { - java.lang.Thread.sleep(_nSeconds * 1000); + java.lang.Thread.sleep(_nSeconds * 250); } catch (java.lang.InterruptedException e2) {} } + + private int m_nSeconds; + private int m_nMilliSeconds; + private long m_nRealMilliSeconds; + + private boolean m_bIsStopped = false; + + public TimeHelper() + {} + + public void start() + { + m_bIsStopped = false; + Calendar cal = Calendar.getInstance(); + m_nSeconds = cal.get(Calendar.SECOND); + m_nMilliSeconds = cal.get(Calendar.MILLISECOND); + } + public void stop() + { + Calendar cal = Calendar.getInstance(); + m_bIsStopped = true; + int nSeconds = cal.get(Calendar.SECOND); + m_nSeconds = nSeconds - m_nSeconds; + if (m_nSeconds < 0) + { + // add a minute + m_nSeconds += 60; + } + + int nMilliSeconds = cal.get(Calendar.MILLISECOND); + m_nMilliSeconds = nMilliSeconds - m_nMilliSeconds; + m_nRealMilliSeconds = m_nSeconds * 1000 + m_nMilliSeconds; + } + + public String getTime() + { + return String.valueOf(m_nRealMilliSeconds); + } + } diff --git a/qadevOOo/runner/graphical/Tolerance.java b/qadevOOo/runner/graphical/Tolerance.java new file mode 100644 index 000000000000..90e853c9124c --- /dev/null +++ b/qadevOOo/runner/graphical/Tolerance.java @@ -0,0 +1,23 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package graphical; + +/** + * + * @author ll93751 + */ +public class Tolerance +{ + private int m_nTolerance; + public Tolerance(int _nAccept) + { + m_nTolerance = _nAccept; + } + public int getAccept() + { + return m_nTolerance; + } +} diff --git a/qadevOOo/runner/graphical/makefile.mk b/qadevOOo/runner/graphical/makefile.mk index db1f84ca26ca..4e1b0e98cba1 100644 --- a/qadevOOo/runner/graphical/makefile.mk +++ b/qadevOOo/runner/graphical/makefile.mk @@ -64,7 +64,8 @@ PostscriptCreator.java \ PropertyName.java \ TimeHelper.java \ WrongEnvironmentException.java \ -WrongSuffixException.java +WrongSuffixException.java \ +Tolerance.java # GraphicalComparator.java diff --git a/qadevOOo/runner/helper/OfficeProvider.java b/qadevOOo/runner/helper/OfficeProvider.java index adeecbdeba1d..8589de47ea82 100644 --- a/qadevOOo/runner/helper/OfficeProvider.java +++ b/qadevOOo/runner/helper/OfficeProvider.java @@ -130,9 +130,7 @@ public class OfficeProvider implements AppProvider try { - desk = (XDesktop) UnoRuntime.queryInterface(XDesktop.class, - msf.createInstance( - "com.sun.star.frame.Desktop")); + desk = UnoRuntime.queryInterface(XDesktop.class, msf.createInstance("com.sun.star.frame.Desktop")); } catch (com.sun.star.uno.Exception ue) { @@ -341,18 +339,15 @@ public class OfficeProvider implements AppProvider { // Get component context - final XComponentContext xcomponentcontext = com.sun.star.comp.helper.Bootstrap.createInitialComponentContext( - null); + final XComponentContext xcomponentcontext = com.sun.star.comp.helper.Bootstrap.createInitialComponentContext(null); // initial serviceManager final XMultiComponentFactory xLocalServiceManager = xcomponentcontext.getServiceManager(); // create a connector, so that it can contact the office // XUnoUrlResolver urlResolver = UnoUrlResolver.create(xcomponentcontext); - final Object xUrlResolver = xLocalServiceManager.createInstanceWithContext( - "com.sun.star.bridge.UnoUrlResolver", xcomponentcontext); - final XUnoUrlResolver urlResolver = (XUnoUrlResolver) UnoRuntime.queryInterface( - XUnoUrlResolver.class, xUrlResolver); + final Object xUrlResolver = xLocalServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", xcomponentcontext); + final XUnoUrlResolver urlResolver = UnoRuntime.queryInterface(XUnoUrlResolver.class, xUrlResolver); final Object rInitialObject = urlResolver.resolve(connectStr); @@ -363,8 +358,7 @@ public class OfficeProvider implements AppProvider debug = true; dbg("resolved url"); - xMSF = (XMultiServiceFactory) UnoRuntime.queryInterface( - XMultiServiceFactory.class, rInitialObject); + xMSF = UnoRuntime.queryInterface(XMultiServiceFactory.class, rInitialObject); } return xMSF; @@ -485,7 +479,7 @@ public class OfficeProvider implements AppProvider try { Object quickStarter = msf.createInstance("com.sun.star.office.Quickstart"); - XFastPropertySet fps = (XFastPropertySet) UnoRuntime.queryInterface(XFastPropertySet.class, quickStarter); + XFastPropertySet fps = UnoRuntime.queryInterface(XFastPropertySet.class, quickStarter); fps.setFastPropertyValue(0, false); } catch (com.sun.star.uno.Exception ex) @@ -495,9 +489,7 @@ public class OfficeProvider implements AppProvider try { - desk = (XDesktop) UnoRuntime.queryInterface(XDesktop.class, - msf.createInstance( - "com.sun.star.frame.Desktop")); + desk = UnoRuntime.queryInterface(XDesktop.class, msf.createInstance("com.sun.star.frame.Desktop")); msf = null; if (desk != null) @@ -616,9 +608,7 @@ public class OfficeProvider implements AppProvider { while (compEnum.hasMoreElements()) { - final XCloseable closer = (XCloseable) UnoRuntime.queryInterface( - XCloseable.class, - compEnum.nextElement()); + final XCloseable closer = UnoRuntime.queryInterface(XCloseable.class, compEnum.nextElement()); if (closer != null) { @@ -658,8 +648,7 @@ public class OfficeProvider implements AppProvider if (xPathSubst != null) { - return (XStringSubstitution) UnoRuntime.queryInterface( - XStringSubstitution.class, xPathSubst); + return UnoRuntime.queryInterface(XStringSubstitution.class, xPathSubst); } else { @@ -790,6 +779,7 @@ public class OfficeProvider implements AppProvider this.ow = ow; } + @Override public void run() { System.out.println(utils.getDateTime() + "OfficeProvider:Owp: start "); diff --git a/qadevOOo/runner/org/openoffice/Runner.java b/qadevOOo/runner/org/openoffice/Runner.java index 63486ca9d3f3..a3741774917e 100644 --- a/qadevOOo/runner/org/openoffice/Runner.java +++ b/qadevOOo/runner/org/openoffice/Runner.java @@ -182,8 +182,9 @@ public class Runner } } - public static boolean run(String... args) { - System.out.println("OOoRunner Main() version from 20100125 (yyyymmdd)"); + public static boolean run(String... args) + { + System.out.println("OOoRunner Main() version from 20100323 (yyyymmdd)"); setStartTime(getTime()); diff --git a/testgraphical/document-pool/demo/CurrentTime.ods b/testgraphical/document-pool/demo/CurrentTime.ods Binary files differnew file mode 100644 index 000000000000..e027215ddb74 --- /dev/null +++ b/testgraphical/document-pool/demo/CurrentTime.ods diff --git a/testgraphical/document-pool/demo/knownissues.xcl b/testgraphical/document-pool/demo/knownissues.xcl new file mode 100644 index 000000000000..5cdad159bc35 --- /dev/null +++ b/testgraphical/document-pool/demo/knownissues.xcl @@ -0,0 +1,8 @@ +[ps] +### contains date in it, will fail every time ### +CurrentTime.ods + +[pdf] +### contains date in it, will fail every time ### +CurrentTime.ods + diff --git a/testgraphical/document-pool/singletest/eis-test.odt b/testgraphical/document-pool/singletest/eis-test.odt Binary files differnew file mode 100644 index 000000000000..bb9c6a43f623 --- /dev/null +++ b/testgraphical/document-pool/singletest/eis-test.odt diff --git a/testgraphical/prechecks/makefile.mk b/testgraphical/prechecks/makefile.mk new file mode 100644 index 000000000000..13796c949ab5 --- /dev/null +++ b/testgraphical/prechecks/makefile.mk @@ -0,0 +1,56 @@ +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +PRJ=.. + +PRJNAME=gfxcmp_prechecks +TARGET=notargetyet + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk + +.IF "$(VERBOSE)"!="" + P_VERBOSE=-verbose +.ENDIF +.IF "$(SHOW)"!="" + P_JAVA6=-java6 +.ENDIF + +# PERLDEBUG=-d:ptkdb +ALLTAR: +.IF "$(GUI)"=="WNT" || "$(GUI)"=="OS2" + $(PERL) $(PERLDEBUG) softwaretests.pl -printerdriver -imagemagick -ghostscript $(P_VERBOSE) $(P_JAVA6) +.ELSE + $(PERL) $(PERLDEBUG) softwaretests.pl -imagemagick -ghostscript $(P_VERBOSE) $(P_JAVA6) +.ENDIF + +.INCLUDE : $(PRJ)$/util$/makefile.pmk diff --git a/testgraphical/prechecks/softwaretests.pl b/testgraphical/prechecks/softwaretests.pl new file mode 100644 index 000000000000..f591fa139879 --- /dev/null +++ b/testgraphical/prechecks/softwaretests.pl @@ -0,0 +1,564 @@ +eval 'exec perl -wS $0 ${1+\"$@\"}' + if 0; + +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +# This is a pre check, which checks if some extra software exists + +BEGIN +{ + # Adding the path of this script file to the include path in the hope + # that all used modules can be found in it. + $0 =~ /^(.*)[\/\\]/; + push @INC, $1; +} + +use strict; +use English; # $OSNAME, ... +use Getopt::Long; +use Cwd; +use Cwd 'chdir'; +my $cwd = getcwd(); + +our $help; # Help option flag +our $version; # Version option flag + +# flush STDOUT +# my $old_handle = select (STDOUT); # "select" STDOUT and save # previously selected handle +# $| = 1; # perform flush after each write to STDOUT +# select ($old_handle); # restore previously selected handle + +$OUTPUT_AUTOFLUSH=1; # works only if use English is used. + +our $sGlobalIniFile; +our $verbose = 0; +our $ghostscript; +our $imagemagick; +our $java6; +our $printerdriver; + +our $version_info = 'compare.pl'; + +GetOptions( + "ghostscript" => \$ghostscript, + "imagemagick" => \$imagemagick, + "java6" => \$java6, + "printerdriver" => \$printerdriver, + "verbose" => \$verbose, + + "help" => \$help, + "version" => \$version + ); + +if ($help) +{ + print_usage(*STDOUT); + exit(0); +} +# Check for version option +if ($version) +{ + print STDERR "$version_info\n"; + exit(0); +} + +# prepare the GlobalIniFile + +sub prepare() +{ + my $sEnv = "$ENV{PRJ}"; + if (! $sEnv) + { + print "Warning: Seems you are not in a makefile.mk environment.\n"; + $sEnv = ".."; + } + my $sPath = getcwd(); + $sPath .= "/" . $sEnv; + chdir ($sPath); + cwd(); + $sPath = getcwd(); + my $sInpath = $ENV{INPATH}; + $sPath .= "/" . $sInpath . "/misc"; + $sGlobalIniFile = "$sPath/pathes.ini"; + print "Global Path ini file is: $sGlobalIniFile\n" if ($verbose); +} + +sub unixpath($) +{ + my $path = shift; + $path =~ s/\\/\//g; # make out of '\' a '/' + return $path; +} + +# search for file in a given path list. +# the path list should be separated as the path variable in the corresponding OS +sub searchForFileInPath($$) +{ + my $sFile = shift; + my $sPathList = shift; + + my $sep = ':'; + if ($OSNAME eq "MSWin32") + { + $sep = ';'; + } + my @path = split($sep, $sPathList); + + my $sPath; + my $startdir; + my $bFound = 0; + my $olddir = getcwd(); + + my $sWindowsHomeDir = unixpath(lc($ENV{WINDIR})); + + foreach $startdir (@path) + { + my $nCount = 0; + # + # IMPORTANT: leave out windir path. + # + if ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") + { + my $sPath = unixpath(lc(convertCygwinPath($startdir))); + if ($sPath =~ /^$sWindowsHomeDir/ ) + { + print "path: $startdir is windows path leave out.\n" if ($verbose); + next; + } + } + + local *DIR; + if (opendir (DIR, $startdir)) # open directory + { + print "path: $startdir" if ($verbose); + chdir ($startdir); + cwd(); + my $myfile; + while ($myfile = readdir(DIR)) # get filename + { + if (-f $myfile ) # is it a file? + { + $nCount ++; + if ($myfile eq $sFile) # is it the real file? + { + $sPath = $startdir; + $bFound = 1; + last; + } + } + } + closedir(DIR); + print " ($nCount)\n" if ($verbose); + } + if ($bFound == 1) + { + last; + } + } + chdir ($olddir); + cwd(); + + return $sPath; +} + + +prepare(); +# don't remove the inifile, only build clean should do this. +# if ( -e "$sGlobalIniFile") +# { +# unlink($sGlobalIniFile); +# } + + +# small helper, which replaces the return code +sub errorAdaption($) +{ + my $error = shift; + if ($error != 0) + { + $error = $error / 256; + } + if ($error > 127) + { + $error = $error - 256; + } + return $error; +} + +# for every error we increment this variable by 1 +our $nGlobalErrors = 0; + +sub handleError($$) +{ + my $error = shift; + my $sText = shift; + if ($error != 0) + { + print "ERROR: search for $sText has failed with Errornumber: $error\n"; + $nGlobalErrors ++; + } +} + +sub convertCygwinPath($) +{ + my $sPath = shift; + + if ($OSNAME eq "cygwin") + { + # print "Cygwin Path Patch.\n" if ($verbose); + if ($sPath =~ /\/cygdrive\/(.)/) + { + my $Letter = $1; + $sPath =~ s/\/cygdrive\/${Letter}/${Letter}\:/; + # print "Cygwin Path Patch: '$sPath'\n" if ($verbose); + } + } + return $sPath; +} + +# append key=value to GlobalIniFile +sub insertPath($$) +{ + my $sKey = shift; + my $sValue = shift; + + $sValue = convertCygwinPath($sValue); + my $sIniFile = convertCygwinPath($sGlobalIniFile); + local *INIFILE; + if (open(INIFILE, ">>" . $sIniFile )) + { + print INIFILE "$sKey=$sValue\n"; + } + close(INIFILE); +} + +sub getFastPath($) +{ + my $sKey = shift; + my $sValue; + local *INIFILE; + my $sIniFile = convertCygwinPath($sGlobalIniFile); + if (open(INIFILE, $sIniFile)) + { + my $line; + while ($line = <INIFILE>) + { + chomp($line); + if ( $line =~ /^$sKey=(.*)$/ ) + { + $sValue = $1; + # print INIFILE "$sKey=$sValue\n"; + } + } + close(INIFILE); + } + return $sValue; +} + +sub checkForGhostscript() +{ + print "Search for Ghostscript\n" if ($verbose); + if ($OSNAME eq "linux" || + $OSNAME eq "solaris") + { + # search for ghostscript + local *GHOSTSCRIPT; + if (open(GHOSTSCRIPT, "which gs 2>&1 |")) + { + my $line; + while ($line = <GHOSTSCRIPT>) + { + chomp($line); + print "- $line\n" if ($verbose); + } + close(GHOSTSCRIPT); + } + my $error = errorAdaption($?); + handleError($error, "Ghostscript"); + } + elsif ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") + { + my $sGSExe = "gswin32c.exe"; + # my $sGSPath = "C:/gs/gs8.64/bin"; + my $sGSPath = getFastPath("gs.path"); + if (! $sGSPath) + { + $sGSPath = searchForFileInPath($sGSExe, $ENV{PATH}); + + if ( ! -e "$sGSPath/$sGSExe") + { + $nGlobalErrors ++; + print "ERROR: search for $sGSPath/$sGSExe failed.\n"; + print "Please install ghostscript from www.adobe.com to and make it available in \$PATH variable \n"; + } + else + { + insertPath("gs.path", $sGSPath); + insertPath("gs.exe", $sGSExe); + } + } + if ( -e "$sGSPath/$sGSExe" ) + { + print "Found Ghostscript: '$sGSPath'\n" if ($verbose); + } + } + else + { + print "ERROR: Check for Ghostscript failed, due to unsupported '$OSNAME' environment.\n"; + $nGlobalErrors ++; + } +} + + +sub checkForPSDriver() +{ + # we don't need to check for unix here, due to the fact, unix is per default be able to print in postscript + if ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") + { + print "Check for postscript driver.\n" if ($verbose); + my $sWindowsRoot = $ENV{windir}; + if (! $sWindowsRoot) + { + $sWindowsRoot = $ENV{WINDIR}; + } + my $sCrossOfficeDriver = "${sWindowsRoot}/system32/crossoffice.ppd"; + if ( ! -e "$sCrossOfficeDriver") + { + print "ERROR: Don't found Postscript driver $sCrossOfficeDriver file\n"; + $nGlobalErrors ++; + print "Take a look on: http://so-gfxcmp.germany.sun.com/docs/further/convwatch/convwatch.html.\n"; + } + } +} + +sub checkForImageMagick() +{ + print "Search for Imagemagick\n" if ($verbose); + if ($OSNAME eq "linux" || + $OSNAME eq "solaris") + { + # search for imagemagick + local *IMAGEMAGICK; + if (open(IMAGEMAGICK, "which convert 2>&1 |")) + { + my $line; + while ($line = <IMAGEMAGICK>) + { + chomp($line); + print "- $line\n" if ($verbose); + } + close(IMAGEMAGICK); + } + my $error = errorAdaption($?); + handleError($error, "Imagemagick"); + } + elsif ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") + { + my $sImageMagickExe = "convert.exe"; + # my $sImageMagickPath = "C:/gs/gs8.64/bin"; + my $sImageMagickPath = getFastPath("imagemagick.path"); + if (! $sImageMagickPath) + { + $sImageMagickPath = searchForFileInPath($sImageMagickExe, $ENV{PATH}); + if ($sImageMagickPath) + { + if ( ! -e "$sImageMagickPath/$sImageMagickExe") + { + $nGlobalErrors ++; + print "ERROR: search for $sImageMagickPath/$sImageMagickExe failed.\n"; + print "Please install ImageMagick from www.imagemagick.org to and make it available in \$PATH variable \n"; + } + else + { + insertPath("imagemagick.path", $sImageMagickPath); + # insertPath("gs.exe", $sImageMagickExe); + } + } + else + { + # next try, search image magick in $PROGRAMFILES + my $sPrograms = unixpath($ENV{PROGRAMFILES}); + + if (! $sPrograms) + { + print "There exist no \$PROGRAMFILES path, wrong Windows version?\n"; + $nGlobalErrors++; + } + else + { + local *DIR; + if (opendir (DIR, $sPrograms)) # open program directory + { + my $myfile; + while ($myfile = readdir(DIR)) # get a filename + { + if ($myfile =~ /ImageMagick/) + { + $sImageMagickPath = $sPrograms . "/" . $myfile; + last; + } + } + closedir(DIR); + } + if (! -e $sImageMagickPath) + { + print "ImageMagick not found.\n"; + $nGlobalErrors ++; + } + else + { + insertPath("imagemagick.path", $sImageMagickPath); + } + } + } + + } + if ( -e "$sImageMagickPath/$sImageMagickExe" ) + { + print "Found ImageMagick: '$sImageMagickPath'\n" if ($verbose); + } + } + else + { + print "ERROR: not supported environment\n"; + } +} + +sub checkForJava6() +{ + print "Search for Java6\n" if ($verbose); + my $javaexe = "java"; + if ( $ENV{JAVA6} ) + { + $javaexe = $ENV{JAVA6}; + } + + if ($OSNAME eq "linux" || $OSNAME eq "cygwin") + { + # search for imagemagick + local *JAVA; + if (open(JAVA, "$javaexe -version 2>&1 |")) + { + my $line; + while ($line = <JAVA>) + { + chomp($line); + print "- $line\n" if ($verbose); + if ( $line =~ /java version "(.*)"/ ) + { + my $javaversion = $1; + my @version = split('\.', $javaversion); + print "Found Java version: $version[1] the complete version: $javaversion\n" if ($verbose); + if ( $version[1] < 6) + { + print "Wrong Java version, at least Java version 6 is need but found $javaversion.\n"; + $nGlobalErrors++; + print "It is possible to overwrite the java exe with environment variable JAVA6='path'.\n"; + } + else + { + insertPath("java.exe", $javaexe); + } + last; + } + } + close(JAVA); + } + my $error = errorAdaption($?); + handleError($error, "Java"); + } + elsif ($OSNAME eq "MSWin32") + { + my $javaexe = "java"; + if ( $ENV{JAVA6} ) + { + $javaexe = $ENV{JAVA6}; + } + + if (! -e $javaexe) + { + print "Java not found.\n"; + $nGlobalErrors ++; + } + else + { + print "Found Java: '$javaexe'\n" if ($verbose); + insertPath("java.exe", $javaexe); + } + } + else + { + print "ERROR: Java not found.\n"; + } +} + +# different checks +print "Environment '$OSNAME'\n" if ($verbose); + +if ($printerdriver) +{ + checkForPSDriver(); +} +if ($ghostscript) +{ + checkForGhostscript(); +} +if ($imagemagick) +{ + checkForImageMagick(); +} +if ($java6) +{ + checkForJava6(); +} + +# return with found errors +exit($nGlobalErrors); + +# ------------------------------------------------------------------------------ +sub print_usage(*) +{ + local *HANDLE = $_[0]; + my $tool_name = basename($0); + + print(HANDLE <<END_OF_USAGE); + +Usage: $tool_name [OPTIONS] + + -ghostscript Try to find ghostscript in your environment + -imagemagick Try to find imagemagick + -java6 Checks for java 1.6.x + -printerdriver Try to find printer driver, windows only + -verbose be verbose + + -h, --help Print this help, then exit + -v, --version Print version number, then exit + +END_OF_USAGE +; +} diff --git a/testgraphical/prj/build.lst b/testgraphical/prj/build.lst new file mode 100755 index 000000000000..6334b6a01d55 --- /dev/null +++ b/testgraphical/prj/build.lst @@ -0,0 +1,7 @@ +gfxcmp testgraphical : instset_native NULL +gfxcmp testgraphical usr1 - all gfxcmp_mkout NULL +gfxcmp testgraphical\prechecks nmake - all gfxcmp_pre NULL +gfxcmp testgraphical\ui\java\ConvwatchGUIProject nmake - all gfxcmp_java_ui NULL +gfxcmp testgraphical\ui\java nmake - all gfxcmp_java gfxcmp_java_ui NULL +# gfxcmp testgraphical\source nmake - all gfxcmp_src gfxcmp_pre gfxcmp_java NULL +gfxcmp testgraphical\qa\graphical nmake - all gfxcmp_qa gfxcmp_pre gfxcmp_java NULL diff --git a/testgraphical/prj/d.lst b/testgraphical/prj/d.lst new file mode 100755 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/testgraphical/prj/d.lst diff --git a/testgraphical/qa/graphical/Test.java b/testgraphical/qa/graphical/Test.java new file mode 100644 index 000000000000..8c633dede44c --- /dev/null +++ b/testgraphical/qa/graphical/Test.java @@ -0,0 +1,113 @@ +/************************************************************************* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2000, 2010 Oracle and/or its affiliates. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* <http://www.openoffice.org/license.html> +* for a copy of the LGPLv3 License. +************************************************************************/ + +package org.openoffice.testgraphical.qa.graphical; + +import org.openoffice.Runner; +import org.openoffice.test.OfficeConnection; +import static org.junit.Assert.*; + +import helper.ProcessHandler; +import graphical.FileHelper; +import java.io.File; + +public final class Test { + @org.junit.Before + public void setUp() throws Exception + { + connection.setUp(); + } + + @org.junit.After + public void tearDown() throws Exception + { + connection.tearDown(); + } + + @org.junit.Test + public void test() + { + boolean good = true; + + final String sPerlEXE = System.getenv("PERL"); + // System.out.println("PERL:=" + sPerlEXE); + + final String sPRJ = System.getenv("PRJ"); + // System.out.println("PRJ:=" + sPRJ); + + String sShow = ""; + if (System.getProperty("SHOW") != null) + { + sShow = "-show"; + } + + final String sComparePath = FileHelper.appendPath(sPRJ, "source"); + final String sCompareName = FileHelper.appendPath(sComparePath, "compare.pl"); + + File aCompareFile = new File(sCompareName); + if (!aCompareFile.exists()) + { + System.out.println("Path to compare.pl is wrong: '" + aCompareFile.getAbsolutePath() + "'"); + assertTrue(false); + } + + final String sConnectionString = connection.getDescription(); + + String[] sCommandArray = + { + sPerlEXE, + aCompareFile.getAbsolutePath(), + "-creatortype", "pdf", + +// If you make changes here, do it also in ../../source/makefile.mk in selftest: target! + + "-pool", "singletest", + "-document", "eis-test.odt", + // "-pool", "demo", + // "-document", "CurrentTime.ods", + "-connectionstring", sConnectionString, + // "-verbose", + sShow + }; + + ProcessHandler aHandler = new ProcessHandler(sCommandArray); + boolean bBackValue = aHandler.executeSynchronously(); + int nExitCode = aHandler.getExitCode(); + + // String sBack = aHandler.getOutputText(); + if (nExitCode != 0) + { + good = false; + } + + assertTrue(good); + + // Runner.run( + // "-sce", "sw.sce", "-xcl", "knownissues.xcl", "-tdoc", + // "testdocuments", "-cs", connection.getDescription())); + } + + private final OfficeConnection connection = new OfficeConnection(); +} diff --git a/testgraphical/qa/graphical/makefile.mk b/testgraphical/qa/graphical/makefile.mk new file mode 100644 index 000000000000..7cb43a6585db --- /dev/null +++ b/testgraphical/qa/graphical/makefile.mk @@ -0,0 +1,57 @@ +#************************************************************************* +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +#***********************************************************************/ + +.IF "$(OOO_SUBSEQUENT_TESTS)" == "" +nothing .PHONY: + @echo "OOO_SUBSEQUENT_TESTS not given, do nothing." +.ELSE + +PRJ = ../.. +PRJNAME = testgraphical +TARGET = qa_graphical + +.IF "$(OOO_JUNIT_JAR)" != "" + +.IF "$(SHOW)" != "" +# You will need java6 for this! +JAVAIFLAGS:=$(JAVAIFLAGS) -DSHOW=1 +.ENDIF + +PACKAGE = org/openoffice/testgraphical/qa/graphical +JAVATESTFILES = Test.java +JAVAFILES = $(JAVATESTFILES) +JARFILES = OOoRunner.jar test.jar +EXTRAJARFILES = $(OOO_JUNIT_JAR) +.END + +.INCLUDE: settings.mk +.INCLUDE: target.mk +.INCLUDE: installationtest.mk + +ALLTAR : javatest + +.END + +clean: diff --git a/testgraphical/references/unxlngi/demo/CurrentTime.ods.pdf b/testgraphical/references/unxlngi/demo/CurrentTime.ods.pdf Binary files differnew file mode 100644 index 000000000000..a753c03708c7 --- /dev/null +++ b/testgraphical/references/unxlngi/demo/CurrentTime.ods.pdf diff --git a/testgraphical/references/unxlngi/demo/CurrentTime.ods.ps b/testgraphical/references/unxlngi/demo/CurrentTime.ods.ps new file mode 100644 index 000000000000..aa7455255e2c --- /dev/null +++ b/testgraphical/references/unxlngi/demo/CurrentTime.ods.ps @@ -0,0 +1,576 @@ +%!PS-Adobe-3.0 +%%BoundingBox: (atend) +%%Creator: (Oracle Open Office 3.2) +%%For: (ll93751) +%%CreationDate: (Fri May 12 00:00:14 2000) +%%Title: (CurrentTime) +%%LanguageLevel: 2 +%%DocumentData: Clean7Bit +%%Pages: (atend) +%%Orientation: (atend) +%%PageOrder: Ascend +%%EndComments +%%BeginProlog +%%BeginResource: procset PSPrint-Prolog 1.0 0 +/ISO1252Encoding [ +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle +/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash +/zero /one /two /three /four /five /six /seven +/eight /nine /colon /semicolon /less /equal /greater /question +/at /A /B /C /D /E /F /G +/H /I /J /K /L /M /N /O +/P /Q /R /S /T /U /V /W +/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore +/grave /a /b /c /d /e /f /g +/h /i /j /k /l /m /n /o +/p /q /r /s /t /u /v /w +/x /y /z /braceleft /bar /braceright /asciitilde /unused +/Euro /unused /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl +/circumflex /perthousand /Scaron /guilsinglleft /OE /unused /Zcaron /unused +/unused /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash +/tilde /trademark /scaron /guilsinglright /oe /unused /zcaron /Ydieresis +/space /exclamdown /cent /sterling /currency /yen /brokenbar /section +/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron +/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered +/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown +/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla +/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis +/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply +/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls +/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla +/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis +/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide +/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] def + +/psp_definefont { exch dup findfont dup length dict begin { 1 index /FID ne +{ def } { pop pop } ifelse } forall /Encoding 3 -1 roll def +currentdict end exch pop definefont pop } def + +/pathdict dup 8 dict def load begin +/rcmd { { currentfile 1 string readstring pop 0 get dup 32 gt { exit } +{ pop } ifelse } loop dup 126 eq { pop exit } if 65 sub dup 16#3 and 1 +add exch dup 16#C and -2 bitshift 16#3 and 1 add exch 16#10 and 16#10 +eq 3 1 roll exch } def +/rhex { dup 1 sub exch currentfile exch string readhexstring pop dup 0 +get dup 16#80 and 16#80 eq dup 3 1 roll { 16#7f and } if 2 index 0 3 +-1 roll put 3 1 roll 0 0 1 5 -1 roll { 2 index exch get add 256 mul } +for 256 div exch pop exch { neg } if } def +/xcmd { rcmd exch rhex exch rhex exch 5 -1 roll add exch 4 -1 roll add +1 index 1 index 5 -1 roll { moveto } { lineto } ifelse } def end +/readpath { 0 0 pathdict begin { xcmd } loop end pop pop } def + +systemdict /languagelevel known not { +/xshow { exch dup length 0 1 3 -1 roll 1 sub { dup 3 index exch get +exch 2 index exch get 1 string dup 0 4 -1 roll put currentpoint 3 -1 +roll show moveto 0 rmoveto } for pop pop } def +/rectangle { 4 -2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 +rlineto closepath } def +/rectfill { rectangle fill } def +/rectstroke { rectangle stroke } def } if +/bshow { currentlinewidth 3 1 roll currentpoint 3 index show moveto +setlinewidth false charpath stroke setlinewidth } def +/bxshow { currentlinewidth 4 1 roll setlinewidth exch dup length 1 sub +0 1 3 -1 roll { 1 string 2 index 2 index get 1 index exch 0 exch put dup +currentpoint 3 -1 roll show moveto currentpoint 3 -1 roll false charpath +stroke moveto 2 index exch get 0 rmoveto } for pop pop setlinewidth } def + +/psp_lzwfilter { currentfile /ASCII85Decode filter /LZWDecode filter } def +/psp_ascii85filter { currentfile /ASCII85Decode filter } def +/psp_lzwstring { psp_lzwfilter 1024 string readstring } def +/psp_ascii85string { psp_ascii85filter 1024 string readstring } def +/psp_imagedict { +/psp_bitspercomponent { 3 eq { 1 }{ 8 } ifelse } def +/psp_decodearray { [ [0 1 0 1 0 1] [0 255] [0 1] [0 255] ] exch get } +def 7 dict dup +/ImageType 1 put dup +/Width 7 -1 roll put dup +/Height 5 index put dup +/BitsPerComponent 4 index psp_bitspercomponent put dup +/Decode 5 -1 roll psp_decodearray put dup +/ImageMatrix [1 0 0 1 0 0] dup 5 8 -1 roll put put dup +/DataSource 4 -1 roll 1 eq { psp_lzwfilter } { psp_ascii85filter } ifelse put +} def +%%EndResource +%%EndProlog +%%BeginSetup +% +%%BeginResource: font ArialMTFID10HGSet1 +%!PS-AdobeFont-1.0-2.53740 +% Creator: SunTypeTools-TT 1.0 gelf +% Original font name: ArialMT +30 dict begin +/PaintType 0 def +/FontType 3 def +/StrokeWidth 0 def +/FontName (ArialMTFID10HGSet1) cvn def +/XUID [103 0 0 16#44E1DF76 13 16#50429D91 16#0D1ECFCF] def +/FontMatrix [.001 0 0 .001 0 0] def +/FontBBox [-664 -324 2028 1037] def +/Encoding 256 array def + 0 1 255 {Encoding exch /.notdef put} for + Encoding 0 /glyph0 put + Encoding 32 /glyph1 put + Encoding 48 /glyph2 put + Encoding 49 /glyph3 put + Encoding 51 /glyph4 put + Encoding 58 /glyph5 put + Encoding 80 /glyph6 put + Encoding 83 /glyph7 put + Encoding 97 /glyph8 put + Encoding 101 /glyph9 put + Encoding 103 /glyph10 put + Encoding 104 /glyph11 put + Encoding 116 /glyph12 put +/CharProcs 14 dict def + CharProcs begin + /.notdef {} def + /glyph0 { + 750 0 125 0 625 625 setcachedevice + 125 0 moveto + 125 625 lineto + 625 625 lineto + 625 0 lineto + 125 0 lineto + closepath + 140 15 moveto + 609 15 lineto + 609 609 lineto + 140 609 lineto + 140 15 lineto + closepath + fill + } bind def + /glyph1 { + 277 0 0 0 0 0 setcachedevice + } bind def + /glyph2 { + 556 0 41 -12 508 718 setcachedevice + 41 353 moveto + 41 437 50 505 67 557 curveto + 84 608 110 648 145 676 curveto + 179 704 222 718 274 718 curveto + 313 718 347 711 375 695 curveto + 404 680 428 658 447 628 curveto + 466 600 481 564 492 522 curveto + 502 480 508 424 508 353 curveto + 508 269 500 201 482 149 curveto + 465 98 439 58 405 30 curveto + 371 2 327 -12 274 -12 curveto + 206 -12 151 12 112 62 curveto + 65 121 41 218 41 353 curveto + closepath + 131 353 moveto + 131 235 145 157 173 118 curveto + 200 80 234 60 274 60 curveto + 315 60 349 79 376 118 curveto + 404 157 417 235 417 353 curveto + 417 470 404 549 376 587 curveto + 349 626 315 645 273 645 curveto + 233 645 201 629 177 594 curveto + 147 551 131 470 131 353 curveto + closepath + fill + } bind def + /glyph3 { + 556 0 108 0 372 718 setcachedevice + 372 0 moveto + 284 0 lineto + 284 560 lineto + 263 540 236 520 201 499 curveto + 167 479 136 464 108 454 curveto + 108 539 lineto + 158 562 201 590 237 623 curveto + 274 655 300 687 315 718 curveto + 372 718 lineto + 372 0 lineto + closepath + fill + } bind def + /glyph4 { + 556 0 41 -12 510 718 setcachedevice + 41 188 moveto + 129 200 lineto + 140 151 157 115 181 93 curveto + 205 71 235 60 270 60 curveto + 311 60 346 74 375 103 curveto + 403 131 417 166 417 209 curveto + 417 250 404 283 377 309 curveto + 352 335 318 348 277 348 curveto + 261 348 240 345 215 338 curveto + 225 416 lineto + 230 415 235 415 239 415 curveto + 276 415 310 424 340 444 curveto + 370 463 385 494 385 534 curveto + 385 566 374 593 352 614 curveto + 331 635 302 646 268 646 curveto + 234 646 205 636 182 614 curveto + 160 593 145 561 138 517 curveto + 50 533 lineto + 61 592 85 637 124 670 curveto + 162 702 209 718 266 718 curveto + 305 718 341 710 374 693 curveto + 406 677 432 654 449 625 curveto + 466 596 475 565 475 532 curveto + 475 501 467 474 450 448 curveto + 434 423 409 402 376 387 curveto + 419 378 452 357 475 327 curveto + 499 296 510 257 510 211 curveto + 510 149 488 96 442 52 curveto + 396 9 339 -12 269 -12 curveto + 207 -12 154 5 113 43 curveto + 71 81 48 129 41 188 curveto + closepath + fill + } bind def + /glyph5 { + 277 0 90 0 190 518 setcachedevice + 90 418 moveto + 90 518 lineto + 190 518 lineto + 190 418 lineto + 90 418 lineto + closepath + 90 0 moveto + 90 100 lineto + 190 100 lineto + 190 0 lineto + 90 0 lineto + closepath + fill + } bind def + /glyph6 { + 666 0 77 0 623 715 setcachedevice + 77 0 moveto + 77 715 lineto + 347 715 lineto + 394 715 431 713 456 708 curveto + 491 703 520 692 544 675 curveto + 568 659 587 636 602 606 curveto + 616 577 623 544 623 508 curveto + 623 448 604 396 565 354 curveto + 526 312 457 291 355 291 curveto + 171 291 lineto + 171 0 lineto + 77 0 lineto + closepath + 171 375 moveto + 356 375 lineto + 417 375 461 386 487 409 curveto + 513 432 525 464 525 505 curveto + 525 535 518 561 503 583 curveto + 488 604 468 618 443 625 curveto + 427 629 398 631 354 631 curveto + 171 631 lineto + 171 375 lineto + closepath + fill + } bind def + /glyph7 { + 666 0 44 -12 614 728 setcachedevice + 44 229 moveto + 134 237 lineto + 138 202 148 172 164 149 curveto + 179 126 203 108 235 94 curveto + 268 80 305 72 345 72 curveto + 381 72 413 78 441 88 curveto + 469 99 489 114 503 133 curveto + 516 151 523 172 523 194 curveto + 523 216 517 236 503 253 curveto + 491 270 469 284 439 295 curveto + 420 302 377 314 312 330 curveto + 246 346 200 360 173 375 curveto + 140 393 114 415 97 441 curveto + 81 468 72 498 72 530 curveto + 72 566 82 600 103 632 curveto + 123 663 153 687 192 703 curveto + 232 719 275 728 324 728 curveto + 377 728 424 719 464 702 curveto + 505 685 536 660 558 626 curveto + 580 594 591 556 593 514 curveto + 502 507 lineto + 498 552 481 586 453 609 curveto + 425 632 383 644 328 644 curveto + 270 644 229 634 203 613 curveto + 177 592 163 566 163 537 curveto + 163 511 172 490 191 473 curveto + 209 457 257 440 334 422 curveto + 411 405 463 390 492 376 curveto + 534 357 564 333 584 304 curveto + 604 274 614 240 614 202 curveto + 614 164 604 128 582 94 curveto + 560 61 529 35 488 16 curveto + 447 -2 401 -12 350 -12 curveto + 285 -12 231 -2 187 16 curveto + 144 35 109 63 84 101 curveto + 59 139 46 182 44 229 curveto + closepath + fill + } bind def + /glyph8 { + 556 0 36 -11 513 530 setcachedevice + 404 63 moveto + 372 36 340 17 310 5 curveto + 280 -5 248 -11 213 -11 curveto + 156 -11 112 2 82 30 curveto + 51 58 36 93 36 136 curveto + 36 162 41 185 53 206 curveto + 64 227 80 244 99 256 curveto + 117 269 138 279 162 285 curveto + 179 290 205 294 240 298 curveto + 311 307 363 317 396 329 curveto + 397 341 397 348 397 352 curveto + 397 387 389 413 372 427 curveto + 350 447 316 457 272 457 curveto + 231 457 201 450 181 436 curveto + 161 421 146 395 137 358 curveto + 51 370 lineto + 59 407 71 437 89 459 curveto + 107 482 133 500 167 512 curveto + 201 524 240 530 285 530 curveto + 329 530 365 525 393 514 curveto + 420 504 440 491 454 475 curveto + 467 459 476 439 481 415 curveto + 484 400 485 374 485 334 curveto + 485 217 lineto + 485 135 487 84 491 62 curveto + 495 41 502 20 513 0 curveto + 421 0 lineto + 413 18 407 39 404 63 curveto + closepath + 396 260 moveto + 365 247 317 236 253 227 curveto + 217 222 191 216 176 209 curveto + 162 203 150 193 142 181 curveto + 134 168 129 154 129 139 curveto + 129 116 138 96 156 80 curveto + 174 65 200 57 234 57 curveto + 268 57 298 64 324 79 curveto + 351 94 370 114 382 140 curveto + 392 160 396 189 396 228 curveto + 396 260 lineto + closepath + fill + } bind def + /glyph9 { + 556 0 36 -11 514 530 setcachedevice + 420 166 moveto + 511 155 lineto + 497 103 471 62 432 32 curveto + 393 3 344 -11 283 -11 curveto + 208 -11 147 11 103 58 curveto + 59 104 36 170 36 254 curveto + 36 342 59 409 104 458 curveto + 148 506 207 530 278 530 curveto + 348 530 404 506 448 459 curveto + 492 412 514 346 514 260 curveto + 514 255 514 247 514 236 curveto + 127 236 lineto + 130 180 146 136 175 105 curveto + 204 76 240 60 284 60 curveto + 316 60 343 68 366 85 curveto + 389 103 407 129 420 166 curveto + closepath + 132 309 moveto + 421 309 lineto + 418 352 407 385 388 407 curveto + 360 440 324 458 279 458 curveto + 239 458 206 444 178 417 curveto + 150 390 135 354 132 309 curveto + closepath + fill + } bind def + /glyph10 { + 556 0 32 -210 489 530 setcachedevice + 49 -42 moveto + 135 -55 lineto + 138 -81 148 -101 165 -113 curveto + 187 -129 216 -137 254 -137 curveto + 294 -137 326 -129 348 -112 curveto + 370 -96 385 -74 393 -44 curveto + 397 -26 400 10 399 67 curveto + 361 22 313 0 256 0 curveto + 185 0 130 25 90 77 curveto + 52 128 32 190 32 262 curveto + 32 311 41 357 59 399 curveto + 77 440 103 473 137 496 curveto + 170 519 210 530 256 530 curveto + 317 530 368 505 408 456 curveto + 408 518 lineto + 489 518 lineto + 489 70 lineto + 489 -10 481 -67 464 -101 curveto + 448 -134 422 -161 386 -180 curveto + 351 -200 307 -210 254 -210 curveto + 193 -210 143 -196 104 -168 curveto + 67 -140 48 -99 49 -42 curveto + closepath + 122 268 moveto + 122 200 136 151 163 119 curveto + 189 88 224 72 264 72 curveto + 305 72 338 88 366 119 curveto + 393 150 407 199 407 265 curveto + 407 329 393 376 365 409 curveto + 337 441 303 457 263 457 curveto + 224 457 191 441 163 410 curveto + 136 378 122 331 122 268 curveto + closepath + fill + } bind def + /glyph11 { + 556 0 65 0 488 715 setcachedevice + 65 0 moveto + 65 715 lineto + 153 715 lineto + 153 458 lineto + 194 506 246 530 309 530 curveto + 347 530 380 522 409 507 curveto + 437 492 458 471 470 444 curveto + 482 418 488 379 488 328 curveto + 488 0 lineto + 400 0 lineto + 400 328 lineto + 400 372 391 404 372 424 curveto + 353 444 326 454 291 454 curveto + 265 454 240 448 217 434 curveto + 194 421 178 402 168 379 curveto + 159 356 153 324 153 283 curveto + 153 0 lineto + 65 0 lineto + closepath + fill + } bind def + /glyph12 { + 277 0 17 -6 270 699 setcachedevice + 257 78 moveto + 270 0 lineto + 246 -3 224 -6 204 -6 curveto + 172 -6 147 -1 129 8 curveto + 112 18 100 31 92 48 curveto + 85 64 82 99 82 151 curveto + 82 450 lineto + 17 450 lineto + 17 518 lineto + 82 518 lineto + 82 646 lineto + 169 699 lineto + 169 518 lineto + 257 518 lineto + 257 450 lineto + 169 450 lineto + 169 146 lineto + 169 122 170 105 174 98 curveto + 177 91 182 85 189 81 curveto + 196 77 206 75 219 75 curveto + 229 75 241 76 257 78 curveto + closepath + fill + } bind def + end +/BuildGlyph { + exch /CharProcs get exch + 2 copy known not + {pop /.notdef} if + get exec +} bind def +/BuildChar { + 1 index /Encoding get exch get + 1 index /BuildGlyph get exec +} bind def +currentdict end +(ArialMTFID10HGSet1) cvn exch definefont pop +%%EndResource +%%DocumentSuppliedResources: font ArialMTFID10HGSet1 +[{ +%%BeginFeature: *PageSize A4 +<</PageSize [595 842] /ImagingBBox null>> setpagedevice +%%EndFeature +} stopped cleartomark +%%EndSetup +%%Page: 1 1 +%%PageOrientation: Portrait +%%PageBoundingBox: 18 18 577 824 +%%BeginPageSetup +% +%%EndPageSetup +gsave +[0.24 0 0 -0.24 18 824] concat +gsave +grestore +gsave +readpath +V00EC00ECA003CE07D900A00BC~ +closepath clip newpath +grestore +gsave +readpath +V00EC00ECA003CE07D900A00BC~ +closepath clip newpath +1174 280 moveto +0 0 0 setrgbcolor +(ArialMTFID10HGSet1) cvn findfont 42 -42 matrix scale makefont setfont +<536865657431> +[28 23 23 23 12 0] +xshow +grestore +gsave +readpath +V00EC00ECA003CE07D900A00BC~ +closepath clip newpath +grestore +gsave +readpath +V00EC0C8CA003CE07D900A00BC~ +closepath clip newpath +grestore +gsave +readpath +V00EC0C8CA003CE07D900A00BC~ +closepath clip newpath +1174 3256 moveto +0 0 0 setrgbcolor +(ArialMTFID10HGSet1) cvn findfont 42 -42 matrix scale makefont setfont +<5061676520> +[28 23 23 23 0] +xshow +1283 3256 moveto +<31> +show +grestore +gsave +readpath +V00EC0C8CA003CE07D900A00BC~ +closepath clip newpath +grestore +gsave +568 782 moveto +0 0 0 setrgbcolor +(ArialMTFID10HGSet1) cvn findfont 367 -367 matrix scale makefont setfont +<30> +show +781 782 moveto +<3A> +show +1050 782 moveto +<3030> +[204 0] +xshow +1466 782 moveto +<3A> +show +1735 782 moveto +<3133> +[204 0] +xshow +grestore grestore +showpage +%%PageTrailer + +%%Trailer +%%BoundingBox: 0 0 595 842 +%%Orientation: Portrait +%%Pages: 1 +%%EOF diff --git a/testgraphical/references/unxlngi/singletest/eis-test.odt.pdf b/testgraphical/references/unxlngi/singletest/eis-test.odt.pdf Binary files differnew file mode 100644 index 000000000000..cf48e3d3df14 --- /dev/null +++ b/testgraphical/references/unxlngi/singletest/eis-test.odt.pdf diff --git a/testgraphical/references/unxlngi/singletest/eis-test.odt.ps b/testgraphical/references/unxlngi/singletest/eis-test.odt.ps new file mode 100644 index 000000000000..456905de90b2 --- /dev/null +++ b/testgraphical/references/unxlngi/singletest/eis-test.odt.ps @@ -0,0 +1,565 @@ +%!PS-Adobe-3.0 +%%BoundingBox: (atend) +%%Creator: (StarOffice 9) +%%For: (ll93751) +%%CreationDate: (Fri Mar 5 11:50:06 2010) +%%Title: (eis-test) +%%LanguageLevel: 2 +%%DocumentData: Clean7Bit +%%Pages: (atend) +%%Orientation: (atend) +%%PageOrder: Ascend +%%EndComments +%%BeginProlog +%%BeginResource: procset PSPrint-Prolog 1.0 0 +/ISO1252Encoding [ +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle +/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash +/zero /one /two /three /four /five /six /seven +/eight /nine /colon /semicolon /less /equal /greater /question +/at /A /B /C /D /E /F /G +/H /I /J /K /L /M /N /O +/P /Q /R /S /T /U /V /W +/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore +/grave /a /b /c /d /e /f /g +/h /i /j /k /l /m /n /o +/p /q /r /s /t /u /v /w +/x /y /z /braceleft /bar /braceright /asciitilde /unused +/Euro /unused /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl +/circumflex /perthousand /Scaron /guilsinglleft /OE /unused /Zcaron /unused +/unused /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash +/tilde /trademark /scaron /guilsinglright /oe /unused /zcaron /Ydieresis +/space /exclamdown /cent /sterling /currency /yen /brokenbar /section +/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron +/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered +/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown +/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla +/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis +/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply +/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls +/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla +/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis +/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide +/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] def + +/psp_definefont { exch dup findfont dup length dict begin { 1 index /FID ne +{ def } { pop pop } ifelse } forall /Encoding 3 -1 roll def +currentdict end exch pop definefont pop } def + +/pathdict dup 8 dict def load begin +/rcmd { { currentfile 1 string readstring pop 0 get dup 32 gt { exit } +{ pop } ifelse } loop dup 126 eq { pop exit } if 65 sub dup 16#3 and 1 +add exch dup 16#C and -2 bitshift 16#3 and 1 add exch 16#10 and 16#10 +eq 3 1 roll exch } def +/rhex { dup 1 sub exch currentfile exch string readhexstring pop dup 0 +get dup 16#80 and 16#80 eq dup 3 1 roll { 16#7f and } if 2 index 0 3 +-1 roll put 3 1 roll 0 0 1 5 -1 roll { 2 index exch get add 256 mul } +for 256 div exch pop exch { neg } if } def +/xcmd { rcmd exch rhex exch rhex exch 5 -1 roll add exch 4 -1 roll add +1 index 1 index 5 -1 roll { moveto } { lineto } ifelse } def end +/readpath { 0 0 pathdict begin { xcmd } loop end pop pop } def + +systemdict /languagelevel known not { +/xshow { exch dup length 0 1 3 -1 roll 1 sub { dup 3 index exch get +exch 2 index exch get 1 string dup 0 4 -1 roll put currentpoint 3 -1 +roll show moveto 0 rmoveto } for pop pop } def +/rectangle { 4 -2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 +rlineto closepath } def +/rectfill { rectangle fill } def +/rectstroke { rectangle stroke } def } if +/bshow { currentlinewidth 3 1 roll currentpoint 3 index show moveto +setlinewidth false charpath stroke setlinewidth } def +/bxshow { currentlinewidth 4 1 roll setlinewidth exch dup length 1 sub +0 1 3 -1 roll { 1 string 2 index 2 index get 1 index exch 0 exch put dup +currentpoint 3 -1 roll show moveto currentpoint 3 -1 roll false charpath +stroke moveto 2 index exch get 0 rmoveto } for pop pop setlinewidth } def + +/psp_lzwfilter { currentfile /ASCII85Decode filter /LZWDecode filter } def +/psp_ascii85filter { currentfile /ASCII85Decode filter } def +/psp_lzwstring { psp_lzwfilter 1024 string readstring } def +/psp_ascii85string { psp_ascii85filter 1024 string readstring } def +/psp_imagedict { +/psp_bitspercomponent { 3 eq { 1 }{ 8 } ifelse } def +/psp_decodearray { [ [0 1 0 1 0 1] [0 255] [0 1] [0 255] ] exch get } +def 7 dict dup +/ImageType 1 put dup +/Width 7 -1 roll put dup +/Height 5 index put dup +/BitsPerComponent 4 index psp_bitspercomponent put dup +/Decode 5 -1 roll psp_decodearray put dup +/ImageMatrix [1 0 0 1 0 0] dup 5 8 -1 roll put put dup +/DataSource 4 -1 roll 1 eq { psp_lzwfilter } { psp_ascii85filter } ifelse put +} def +%%EndResource +%%EndProlog +%%BeginSetup +% +%%BeginResource: font TimesNewRomanPSMTFID26HGSet1 +%!PS-AdobeFont-1.0-2.53740 +% Creator: SunTypeTools-TT 1.0 gelf +% Original font name: TimesNewRomanPSMT +30 dict begin +/PaintType 0 def +/FontType 3 def +/StrokeWidth 0 def +/FontName (TimesNewRomanPSMTFID26HGSet1) cvn def +/XUID [103 0 0 16#2F10B8E9 9 16#7048BAB3 16#9CA4D966] def +/FontMatrix [.001 0 0 .001 0 0] def +/FontBBox [-568 -306 2028 1006] def +/Encoding 256 array def + 0 1 255 {Encoding exch /.notdef put} for + Encoding 0 /glyph0 put + Encoding 45 /glyph1 put + Encoding 69 /glyph2 put + Encoding 73 /glyph3 put + Encoding 83 /glyph4 put + Encoding 84 /glyph5 put + Encoding 101 /glyph6 put + Encoding 115 /glyph7 put + Encoding 116 /glyph8 put +/CharProcs 10 dict def + CharProcs begin + /.notdef {} def + /glyph0 { + 777 0 125 0 625 625 setcachedevice + 125 0 moveto + 125 625 lineto + 625 625 lineto + 625 0 lineto + 125 0 lineto + closepath + 140 15 moveto + 609 15 lineto + 609 609 lineto + 140 609 lineto + 140 15 lineto + closepath + fill + } bind def + /glyph1 { + 333 0 40 187 292 261 setcachedevice + 40 261 moveto + 292 261 lineto + 292 187 lineto + 40 187 lineto + 40 261 lineto + closepath + fill + } bind def + /glyph2 { + 610 0 20 0 587 662 setcachedevice + 208 625 moveto + 208 364 lineto + 354 364 lineto + 392 364 417 370 430 381 curveto + 447 396 456 422 458 460 curveto + 476 460 lineto + 476 229 lineto + 458 229 lineto + 454 262 449 282 444 291 curveto + 439 303 429 312 416 318 curveto + 402 325 382 328 354 328 curveto + 208 328 lineto + 208 110 lineto + 208 81 210 63 212 57 curveto + 215 50 220 45 226 41 curveto + 232 38 245 36 263 36 curveto + 375 36 lineto + 413 36 440 38 457 43 curveto + 474 49 490 59 506 74 curveto + 526 94 547 125 568 166 curveto + 587 166 lineto + 530 0 lineto + 20 0 lineto + 20 18 lineto + 43 18 lineto + 59 18 74 21 88 29 curveto + 98 34 105 42 109 52 curveto + 113 62 115 84 115 116 curveto + 115 546 lineto + 115 588 111 614 102 624 curveto + 91 637 71 644 43 644 curveto + 20 644 lineto + 20 662 lineto + 530 662 lineto + 538 517 lineto + 519 517 lineto + 512 551 504 575 496 588 curveto + 488 602 476 611 459 618 curveto + 446 623 423 625 390 625 curveto + 208 625 lineto + closepath + fill + } bind def + /glyph3 { + 333 0 24 0 308 662 setcachedevice + 308 18 moveto + 308 0 lineto + 24 0 lineto + 24 18 lineto + 48 18 lineto + 75 18 95 25 107 41 curveto + 115 52 119 77 119 117 curveto + 119 544 lineto + 119 578 117 600 113 611 curveto + 110 619 103 626 93 632 curveto + 79 640 64 644 48 644 curveto + 24 644 lineto + 24 662 lineto + 308 662 lineto + 308 644 lineto + 284 644 lineto + 257 644 238 636 225 620 curveto + 217 609 213 584 213 544 curveto + 213 117 lineto + 213 83 215 62 219 50 curveto + 223 42 229 36 240 29 curveto + 254 22 269 18 284 18 curveto + 308 18 lineto + closepath + fill + } bind def + /glyph4 { + 556 0 62 -15 502 677 setcachedevice + 458 677 moveto + 458 448 lineto + 440 448 lineto + 435 492 424 527 409 553 curveto + 394 579 372 600 344 615 curveto + 316 630 287 638 257 638 curveto + 223 638 195 628 173 607 curveto + 151 586 140 563 140 536 curveto + 140 516 146 498 161 481 curveto + 181 457 229 424 305 383 curveto + 367 351 409 325 432 307 curveto + 454 290 472 269 484 244 curveto + 496 220 502 195 502 168 curveto + 502 119 483 76 444 39 curveto + 405 3 355 -15 293 -15 curveto + 274 -15 256 -13 239 -10 curveto + 229 -9 208 -2 177 7 curveto + 145 17 125 22 116 22 curveto + 108 22 102 20 97 15 curveto + 93 10 89 0 86 -15 curveto + 68 -15 lineto + 68 211 lineto + 86 211 lineto + 95 164 106 129 121 105 curveto + 135 82 157 62 187 46 curveto + 216 31 248 22 283 22 curveto + 324 22 356 33 380 55 curveto + 403 76 415 102 415 131 curveto + 415 147 411 164 402 180 curveto + 393 197 379 212 360 227 curveto + 348 236 313 257 256 289 curveto + 200 321 159 346 135 365 curveto + 111 384 93 404 81 427 curveto + 68 450 62 475 62 502 curveto + 62 550 80 591 117 625 curveto + 153 660 200 677 256 677 curveto + 291 677 328 668 368 651 curveto + 386 643 399 639 406 639 curveto + 415 639 422 641 427 646 curveto + 433 651 437 662 440 677 curveto + 458 677 lineto + closepath + fill + } bind def + /glyph5 { + 610 0 30 0 585 662 setcachedevice + 578 662 moveto + 585 506 lineto + 567 506 lineto + 563 534 559 553 552 565 curveto + 542 584 529 598 512 607 curveto + 496 616 474 620 446 620 curveto + 353 620 lineto + 353 114 lineto + 353 74 357 48 366 38 curveto + 378 25 397 18 423 18 curveto + 446 18 lineto + 446 0 lineto + 165 0 lineto + 165 18 lineto + 188 18 lineto + 216 18 236 26 248 43 curveto + 255 53 259 77 259 114 curveto + 259 620 lineto + 179 620 lineto + 148 620 126 618 113 613 curveto + 97 607 82 596 70 578 curveto + 58 561 51 537 48 506 curveto + 30 506 lineto + 38 662 lineto + 578 662 lineto + closepath + fill + } bind def + /glyph6 { + 443 0 37 -13 415 460 setcachedevice + 106 278 moveto + 106 212 122 160 154 122 curveto + 187 84 225 65 269 65 curveto + 298 65 324 74 346 90 curveto + 367 106 385 133 400 172 curveto + 415 163 lineto + 409 118 389 78 355 41 curveto + 323 4 282 -13 232 -13 curveto + 179 -13 133 7 94 49 curveto + 56 90 37 146 37 217 curveto + 37 294 56 354 96 396 curveto + 135 439 184 460 243 460 curveto + 293 460 334 444 367 411 curveto + 399 378 415 334 415 278 curveto + 106 278 lineto + closepath + 106 307 moveto + 313 307 lineto + 312 335 308 355 303 367 curveto + 295 385 283 400 267 410 curveto + 250 420 234 426 216 426 curveto + 189 426 165 416 144 395 curveto + 123 374 110 344 106 307 curveto + closepath + fill + } bind def + /glyph7 { + 389 0 48 -13 354 460 setcachedevice + 320 460 moveto + 320 308 lineto + 304 308 lineto + 291 355 276 388 256 405 curveto + 237 422 212 431 182 431 curveto + 160 431 141 425 127 413 curveto + 113 401 106 388 106 373 curveto + 106 355 111 339 122 326 curveto + 132 313 152 299 183 284 curveto + 254 249 lineto + 320 217 354 175 354 122 curveto + 354 81 338 48 308 23 curveto + 277 0 243 -13 204 -13 curveto + 177 -13 146 -8 110 0 curveto + 100 4 91 5 84 5 curveto + 77 5 71 1 66 -6 curveto + 50 -6 lineto + 50 152 lineto + 66 152 lineto + 76 107 93 73 119 49 curveto + 145 26 173 15 205 15 curveto + 228 15 246 21 260 35 curveto + 274 48 281 63 281 82 curveto + 281 104 274 124 258 139 curveto + 242 154 210 173 163 197 curveto + 116 220 85 241 70 260 curveto + 56 279 48 302 48 331 curveto + 48 367 61 398 86 423 curveto + 111 448 144 460 184 460 curveto + 202 460 223 457 248 449 curveto + 265 444 276 441 281 441 curveto + 287 441 291 442 293 445 curveto + 296 447 300 452 304 460 curveto + 320 460 lineto + closepath + fill + } bind def + /glyph8 { + 277 0 9 -7 279 594 setcachedevice + 161 594 moveto + 161 447 lineto + 265 447 lineto + 265 413 lineto + 161 413 lineto + 161 123 lineto + 161 94 165 74 173 64 curveto + 182 54 192 49 205 49 curveto + 216 49 226 52 236 59 curveto + 247 65 254 75 260 88 curveto + 279 88 lineto + 268 57 251 33 230 17 curveto + 210 0 188 -7 166 -7 curveto + 151 -7 137 -2 122 5 curveto + 108 13 98 25 90 41 curveto + 84 56 80 80 80 112 curveto + 80 413 lineto + 9 413 lineto + 9 429 lineto + 27 436 45 448 64 465 curveto + 83 482 100 502 114 526 curveto + 122 538 132 561 145 594 curveto + 161 594 lineto + closepath + fill + } bind def + end +/BuildGlyph { + exch /CharProcs get exch + 2 copy known not + {pop /.notdef} if + get exec +} bind def +/BuildChar { + 1 index /Encoding get exch get + 1 index /BuildGlyph get exec +} bind def +currentdict end +(TimesNewRomanPSMTFID26HGSet1) cvn exch definefont pop +%%EndResource +%%DocumentSuppliedResources: font TimesNewRomanPSMTFID26HGSet1 +%%EndSetup +%%Page: 1 1 +%%PageOrientation: Portrait +%%PageBoundingBox: 18 18 577 824 +%%BeginPageSetup +% +[{ +%%BeginFeature: *PageSize A4 +<</PageSize [595 842] /ImagingBBox null>> setpagedevice +%%EndFeature +} stopped cleartomark +%%EndPageSetup +gsave +[0.24 0 0 -0.24 18 824] concat +gsave +1122 184 moveto +0 0 0 setrgbcolor +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 25 -25 matrix scale makefont setfont +<4549532D54657374> +[15 8 14 9 15 11 10 0] +xshow +1114 215 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 29 -29 matrix scale makefont setfont +<4549532D54657374> +[17 10 16 10 18 13 11 0] +xshow +1107 251 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 33 -33 matrix scale makefont setfont +<4549532D54657374> +[20 11 19 11 20 15 13 0] +xshow +1100 291 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 38 -38 matrix scale makefont setfont +<4549532D54657374> +[23 13 20 13 22 17 15 0] +xshow +1092 337 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 42 -42 matrix scale makefont setfont +<4549532D54657374> +[26 14 23 14 25 19 16 0] +xshow +1088 385 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 44 -44 matrix scale makefont setfont +<4549532D54657374> +[27 14 24 15 27 19 17 0] +xshow +1085 435 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 46 -46 matrix scale makefont setfont +<4549532D54657374> +[28 15 26 15 28 20 18 0] +xshow +1077 490 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 50 -50 matrix scale makefont setfont +<4549532D54657374> +[30 17 28 16 31 22 19 0] +xshow +1070 549 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 54 -54 matrix scale makefont setfont +<4549532D54657374> +[33 18 30 19 33 24 21 0] +xshow +1063 613 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 58 -58 matrix scale makefont setfont +<4549532D54657374> +[35 19 33 20 35 26 23 0] +xshow +1055 681 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 63 -63 matrix scale makefont setfont +<4549532D54657374> +[37 21 35 21 38 28 24 0] +xshow +1048 754 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 67 -67 matrix scale makefont setfont +<4549532D54657374> +[41 22 37 22 41 30 26 0] +xshow +1033 835 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 75 -75 matrix scale makefont setfont +<4549532D54657374> +[46 25 42 25 46 33 29 0] +xshow +1018 926 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 83 -83 matrix scale makefont setfont +<4549532D54657374> +[51 28 46 28 51 37 32 0] +xshow +1003 1025 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 92 -92 matrix scale makefont setfont +<4549532D54657374> +[56 30 51 31 56 40 36 0] +xshow +1003 1127 moveto +<4549532D54657374> +[56 30 51 31 56 40 36 0] +xshow +989 1236 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 100 -100 matrix scale makefont setfont +<4549532D54657374> +[61 33 56 33 61 44 39 0] +xshow +974 1354 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 108 -108 matrix scale makefont setfont +<4549532D54657374> +[66 36 60 36 66 49 41 0] +xshow +959 1481 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 117 -117 matrix scale makefont setfont +<4549532D54657374> +[71 39 65 39 71 52 45 0] +xshow +929 1625 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 133 -133 matrix scale makefont setfont +<4549532D54657374> +[81 44 74 45 81 59 52 0] +xshow +900 1788 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 150 -150 matrix scale makefont setfont +<4549532D54657374> +[92 50 83 50 92 66 58 0] +xshow +870 1969 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 167 -167 matrix scale makefont setfont +<4549532D54657374> +[102 56 93 55 102 73 65 0] +xshow +840 2168 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 183 -183 matrix scale makefont setfont +<4549532D54657374> +[112 61 102 61 112 81 71 0] +xshow +811 2386 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 200 -200 matrix scale makefont setfont +<4549532D54657374> +[122 67 111 67 122 88 78 0] +xshow +766 2630 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 225 -225 matrix scale makefont setfont +<4549532D54657374> +[137 75 125 75 137 100 88 0] +xshow +722 2901 moveto +(TimesNewRomanPSMTFID26HGSet1) cvn findfont 250 -250 matrix scale makefont setfont +<4549532D54657374> +[153 83 139 84 152 112 96 0] +xshow +grestore grestore +showpage +%%PageTrailer + +%%Trailer +%%BoundingBox: 0 0 595 842 +%%Orientation: Portrait +%%Pages: 1 +%%EOF diff --git a/testgraphical/references/unxlngi/singletest/tolerance.ini_ b/testgraphical/references/unxlngi/singletest/tolerance.ini_ new file mode 100644 index 000000000000..ba027e21452a --- /dev/null +++ b/testgraphical/references/unxlngi/singletest/tolerance.ini_ @@ -0,0 +1,4 @@ +# This is the tolerance we will accept if there are problems +# [eis-test.odt.ps] +# accept=111 +# page1=111 diff --git a/testgraphical/references/unxsoli/singletest/eis-test.odt.pdf b/testgraphical/references/unxsoli/singletest/eis-test.odt.pdf Binary files differnew file mode 100644 index 000000000000..96c922f4aa63 --- /dev/null +++ b/testgraphical/references/unxsoli/singletest/eis-test.odt.pdf diff --git a/testgraphical/references/wntmsci/demo/CurrentTime.ods.pdf b/testgraphical/references/wntmsci/demo/CurrentTime.ods.pdf Binary files differnew file mode 100644 index 000000000000..a753c03708c7 --- /dev/null +++ b/testgraphical/references/wntmsci/demo/CurrentTime.ods.pdf diff --git a/testgraphical/references/wntmsci/demo/CurrentTime.ods.ps b/testgraphical/references/wntmsci/demo/CurrentTime.ods.ps new file mode 100644 index 000000000000..36b469ce81a3 --- /dev/null +++ b/testgraphical/references/wntmsci/demo/CurrentTime.ods.ps @@ -0,0 +1,499 @@ +%!PS-Adobe-3.0 +%%Title: CurrentTime +%%Creator: PScript5.dll Version 5.2.2 +%%CreationDate: 5/17/2010 15:0:3 +%%For: ll93751 +%%BoundingBox: (atend) +%%Pages: (atend) +%%Orientation: Portrait +%%PageOrder: Special +%%DocumentNeededResources: (atend) +%%DocumentSuppliedResources: (atend) +%%DocumentData: Clean7Bit +%%TargetDevice: (Generic Printer For MSWord Testing) (1) 1 +%%LanguageLevel: 2 +%%EndComments + +%%BeginDefaults +%%PageBoundingBox: 18 18 577 824 +%%ViewingOrientation: 1 0 0 1 +%%EndDefaults + + +%%BeginProlog +%%BeginResource: file Pscript_WinNT_ErrorHandler 5.0 0 +/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false +setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype +ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch +def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0 +rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def +/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def +typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72 +def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp +exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def +/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype +{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint} +readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop +(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def +/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- ) +tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup +xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint +tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck +{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(]) +tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup +rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint} +forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier +/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin +$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0 +ne{grestoreall}if errorname(VMerror)ne{showpage}if initgraphics courier setfont +lmargin 720 moveto errorname(VMerror)eq{userdict/ehsave known{clear userdict +/ehsave get restore 2 vmreclaim}if vmstatus exch pop exch pop PrtVMMsg}{ +(ERROR: )prnt errorname prnt nl(OFFENDING COMMAND: )prnt/command load prnt +$error/ostack known{nl nl(STACK:)prnt nl nl $error/ostack get aload length{==} +repeat}if}ifelse systemdict/showpage get exec(%%[ Error: )print errorname +=print(; OffendingCommand: )print/command load =print( ]%%)= flush}if end end +end}dup 0 systemdict put dup 4 $brkpage put bind readonly put/currentpacking +where{pop/setpacking where{pop oldpack setpacking}if}if +%%EndResource +userdict /Pscript_WinNT_Incr 230 dict dup begin put +%%BeginResource: file Pscript_FatalError 5.0 0 +userdict begin/FatalErrorIf{{initgraphics findfont 1 index 0 eq{exch pop}{dup +length dict begin{1 index/FID ne{def}{pop pop}ifelse}forall/Encoding +{ISOLatin1Encoding}stopped{StandardEncoding}if def currentdict end +/ErrFont-Latin1 exch definefont}ifelse exch scalefont setfont counttomark 3 div +cvi{moveto show}repeat showpage quit}{cleartomark}ifelse}bind def end +%%EndResource +userdict begin/PrtVMMsg{vmstatus exch sub exch pop gt{[ +(Dieser Druckauftrag erfordert mehr Speicher, als auf diesem Drucker vorhanden ist. ) +100 500 +(Versuchen Sie es mit einer oder mehreren der folgenden Methoden und drucken Sie dann erneut:) +100 485(Whlen Sie fr das Ausgabeformat die Option "Optimale Portierung".)115 +470 +(Stellen Sie sicher, da auf der Registerkarte "Gerteeinstellungen" die Angabe fr "Verfgbarer Postscript-Speicher" korrekt ist.) +115 455(Reduzieren Sie die Anzahl der im Dokument verwendeten Schriftarten. ) +115 440(Drucken Sie das Dokument in verschiedenen Teilstcken. )115 425 12 +/Times-Roman showpage(%%[ PrinterError: Low Printer VM ]%%)= true FatalErrorIf} +if}bind def end version cvi 2016 ge{/VM?{pop}bind def}{/VM? userdict/PrtVMMsg +get def}ifelse +105000 VM? +%%BeginResource: file Pscript_Win_Basic 5.0 0 +/d/def load def/,/load load d/~/exch , d/?/ifelse , d/!/pop , d/`/begin , d/^ +/index , d/@/dup , d/+/translate , d/$/roll , d/U/userdict , d/M/moveto , d/- +/rlineto , d/&/currentdict , d/:/gsave , d/;/grestore , d/F/false , d/T/true , +d/N/newpath , d/E/end , d/Ac/arc , d/An/arcn , d/A/ashow , d/D/awidthshow , d/C +/closepath , d/V/div , d/O/eofill , d/L/fill , d/I/lineto , d/-c/curveto , d/-M +/rmoveto , d/+S/scale , d/Ji/setfont , d/Lc/setlinecap , d/Lj/setlinejoin , d +/Lw/setlinewidth , d/Lm/setmiterlimit , d/sd/setdash , d/S/show , d/LH/showpage +, d/K/stroke , d/W/widthshow , d/R/rotate , d/L2? false/languagelevel where{pop +languagelevel 2 ge{pop true}if}if d L2?{/xS/xshow , d/yS/yshow , d/zS/xyshow , +d}if/b{bind d}bind d/bd{bind d}bind d/xd{~ d}bd/ld{, d}bd/bn/bind ld/lw/Lw ld +/lc/Lc ld/lj/Lj ld/sg/setgray ld/ADO_mxRot null d/self & d/OrgMx matrix +currentmatrix d/reinitialize{: OrgMx setmatrix[/TextInit/GraphInit/UtilsInit +counttomark{@ where{self eq}{F}?{cvx exec}{!}?}repeat cleartomark ;}b +/initialize{`{/Pscript_Win_Data where{!}{U/Pscript_Win_Data & put}?/ADO_mxRot ~ +d/TextInitialised? F d reinitialize E}{U/Pscript_Win_Data 230 dict @ ` put +/ADO_mxRot ~ d/TextInitialised? F d reinitialize}?}b/terminate{!{& self eq +{exit}{E}?}loop E}b/suspend/terminate , d/resume{` Pscript_Win_Data `}b U ` +/lucas 21690 d/featurebegin{countdictstack lucas[}b/featurecleanup{stopped +{cleartomark @ lucas eq{! exit}if}loop countdictstack ~ sub @ 0 gt{{E}repeat} +{!}?}b E/snap{transform 0.25 sub round 0.25 add ~ 0.25 sub round 0.25 add ~ +itransform}b/dsnap{dtransform round ~ round ~ idtransform}b/nonzero_round{@ 0.5 +ge{round}{@ -0.5 lt{round}{0 ge{1}{-1}?}?}?}b/nonzero_dsnap{dtransform +nonzero_round ~ nonzero_round ~ idtransform}b U<04>cvn{}put/rr{1 ^ 0 - 0 ~ - +neg 0 - C}b/irp{4 -2 $ + +S fx 4 2 $ M 1 ^ 0 - 0 ~ - neg 0 -}b/rp{4 2 $ M 1 ^ 0 +- 0 ~ - neg 0 -}b/solid{[]0 sd}b/g{@ not{U/DefIf_save save put}if U/DefIf_bool +2 ^ put}b/DefIf_El{if U/DefIf_bool get not @{U/DefIf_save get restore}if}b/e +{DefIf_El !}b/UDF{L2?{undefinefont}{!}?}b/UDR{L2?{undefineresource}{! !}?}b +/freeVM{/Courier findfont[40 0 0 -40 0 0]makefont Ji 2 vmreclaim}b/hfRedefFont +{findfont @ length dict `{1 ^/FID ne{d}{! !}?}forall & E @ ` ~{/CharStrings 1 +dict `/.notdef 0 d & E d}if/Encoding 256 array 0 1 255{1 ^ ~/.notdef put}for d +E definefont !}bind d/hfMkCIDFont{/CIDFont findresource @ length 2 add dict `{1 +^ @/FID eq ~ @/XUID eq ~/UIDBase eq or or{! !}{d}?}forall/CDevProc ~ d/Metrics2 +16 dict d/CIDFontName 1 ^ d & E 1 ^ ~/CIDFont defineresource ![~]composefont !} +bind d +%%EndResource +%%BeginResource: file Pscript_Win_Utils_L2 5.0 0 +/rf/rectfill , d/fx{1 1 dtransform @ 0 ge{1 sub 0.5}{1 add -0.5}? 3 -1 $ @ 0 ge +{1 sub 0.5}{1 add -0.5}? 3 1 $ 4 1 $ idtransform 4 -2 $ idtransform}b/BZ{4 -2 $ +snap + +S fx rf}b/rs/rectstroke , d/rc/rectclip , d/UtilsInit{currentglobal{F +setglobal}if}b/scol{! setcolor}b/colspA/DeviceGray d/colspABC/DeviceRGB d +/colspRefresh{colspABC setcolorspace}b/SetColSpace{colspABC setcolorspace}b +/resourcestatus where{!/ColorRendering/ProcSet resourcestatus{! ! T}{F}?}{F}? +not{/ColorRendering<</GetHalftoneName{currenthalftone @/HalftoneName known{ +/HalftoneName get}{!/none}?}bn/GetPageDeviceName{currentpagedevice @ +/PageDeviceName known{/PageDeviceName get @ null eq{!/none}if}{!/none}?}bn +/GetSubstituteCRD{!/DefaultColorRendering/ColorRendering resourcestatus{! ! +/DefaultColorRendering}{(DefaultColorRendering*){cvn exit}127 string +/ColorRendering resourceforall}?}bn>>/defineresource where{!/ProcSet +defineresource !}{! !}?}if/buildcrdname{/ColorRendering/ProcSet findresource ` +mark GetHalftoneName @ type @/nametype ne ~/stringtype ne and{!/none}if(.) +GetPageDeviceName @ type @/nametype ne ~/stringtype ne and{!/none}if(.)5 ^ 0 5 +-1 1{^ length add}for string 6 1 $ 5 ^ 5{~ 1 ^ cvs length 1 ^ length 1 ^ sub +getinterval}repeat ! cvn 3 1 $ ! ! E}b/definecolorrendering{~ buildcrdname ~ +/ColorRendering defineresource !}b/findcolorrendering where{!}{ +/findcolorrendering{buildcrdname @/ColorRendering resourcestatus{! ! T}{ +/ColorRendering/ProcSet findresource ` GetSubstituteCRD E F}?}b}? +/selectcolorrendering{findcolorrendering !/ColorRendering findresource +setcolorrendering}b/G2UBegin{findresource/FontInfo get/GlyphNames2Unicode get +`}bind d/G2CCBegin{findresource/FontInfo get/GlyphNames2HostCode get `}bind d +/G2UEnd{E}bind d/AddFontInfoBegin{/FontInfo 8 dict @ `}bind d/AddFontInfo{ +/GlyphNames2Unicode 16 dict d/GlyphNames2HostCode 16 dict d}bind d +/AddFontInfoEnd{E d}bind d/T0AddCFFMtx2{/CIDFont findresource/Metrics2 get ` d +E}bind d +%%EndResource +end +%%EndProlog + +%%BeginSetup +statusdict begin (%%[ ProductName: ) print product print ( ]%%)= flush end +[ 1 0 0 1 0 0 ] false Pscript_WinNT_Incr dup /initialize get exec +featurebegin{ +%%BeginNonPPDFeature: JobTimeout 0 +0 /languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/JobTimeout 4 -1 roll put setuserparams}{statusdict/setjobtimeout get exec}ifelse +%%EndNonPPDFeature +}featurecleanup + +featurebegin{ +%%BeginNonPPDFeature: WaitTimeout 300 +300 /languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse +%%EndNonPPDFeature +}featurecleanup + +featurebegin{ +%%BeginFeature: *InputSlot ManualFeed + +<< /ManualFeed true /Policies << /ManualFeed 1 >> >> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Duplex None + +<</Duplex false /Tumble false + /Policies << /Duplex 1 /Tumble 1 >> +>> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *PageRegion A4 +<</PageSize [595 842] /ImagingBBox null>> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Resolution 1200x1200dpi + + 1 dict dup /HWResolution [1200 1200] put setpagedevice +%%EndFeature +}featurecleanup +1 setlinecap 1 setlinejoin +/mysetup [ 72 1200 V 0 0 -72 1200 V 18 824.0003 ] def +%%EndSetup + +userdict begin /ehsave save def end +%%Page: 1 1 +%%PageBoundingBox: 18 18 577 824 +%%EndPageComments +%%BeginPageSetup +/DeviceRGB dup setcolorspace /colspABC exch def +mysetup concat colspRefresh +%%EndPageSetup + +0 0 0 1 scol 22500 VM? +11 dict begin +/FontName /TTEC2o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1ae15c03974a1a9b3c172d5d01da698bb3e9bd8fb187 +15ad84bc85cd145093e29e1b226d167407e1f00a6529c34100fe35097c0d +b5af1eda9d93c4fbe9bd86433be0237415462af5d09911e8c9f42535e5d2 +2dd429d16a06629077406afc7b7c534dc9e9e045cc02be968fa94e480676 +cb53f625f5f575a27ab6d08d5c839bcfee5628e5ccd4d4605b7fec3a76bb +28738163f3b82fd887dfecdc22fecb045a567be6d3b5a147b633e25bed18 +40c3e8e2f2258801243cf18236f06a8992b5a43fdca766d185ec61f2b174 +d769605817b24a47643e089d8814e415ab639130ea66e36890bd761d0a8f +5d374c4904ff82dfe0f21c18dee922bc8376caeba56e25b6c9ddbd670491 +72036f023f43bf7830df38d0c36ef5d7184a77d3822cb988db6213ddd19d +879129e1b8f3a8dafd1d138bec6d1ded9fbbb5b4294072df1f12a135929c +9a45aea5ebc051f8d6514ccf32b2acbd84dfcbcce5469c945c93be1929e7 +f9fca6965e31a4328311b483ac44acb3daed602b089ab4fe0f74705bb07b +21067988ba7246b0dd96c23046cbbc2414fdb62ca2e102c041d24e977418 +1bd25e1bd6f500cad2b24572a49f549bf2e59a693759d0acb7c42c2caaa6 +f940204c5d06b53cc4847dac692da2e938bf86283692a51a631279087ecd +19b56062b53f44ca8d3025a1c25c7aed9b406e9d9fed5a13ff540359abc6 +0a0a444273d3bf793cb00c3158c1050a0a026d200bf4d34f0237233c5b80 +ee79e7cad72f335228314e3461cd05ef2f3826bc1c5c43a92b0551e00b19 +ebeea73ef66820f36ee61ad9be6012c65138a13ef4cd7745cb966af72d76 +d42781dc5aaf5f69753ae6bd324bf42ec9cee010ff5f487dfaf1eea51f2f +43488c9a9115ceda9b959465b3ae6f1e94ede9ce7867344484db692e5423 +962fa13ffb0073691e3a193f217e588ec12fcad5e3c7a2da41073813b4e4 +99a784d26534294d71d117a87c98a814df39bf6fc01fac1bf8f73960775b +0a4ed51d90d942c14585b424223f30c4f93ee07bd3c05dd7f36271b10cc0 +914af6e94e4451befc31d1557802dad903b71eb5189c18fadd8ba9ce4ff0 +c2d750518bfca7c652b5c5d314a35fefb8e62e62632d0168c97718779689 +97abcc8e922914102cc46e07874511d23c143f7c2440a81b012532995272 +f01ae7b4d8f66ffac047ba7ddcf4b156ce29e19491ceb0af30494c5755e6 +16eb123ec1f237fa5d36c4a03de9e90000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTEC2o00 findfont /Encoding get +dup 1 /S put +dup 2 /h put +dup 3 /e put +dup 4 /t put +dup 5 /one put +pop +Pscript_WinNT_Incr begin +%%BeginResource: file Pscript_Text 5.0 0 +/TextInit{TextInitialised? not{/Pscript_Windows_Font & d/TextInitialised? T d +/fM[1 0 0 1 0 0]d/mFM matrix d/iMat[1 0 0.212557 1 0 0]d}if}b/copyfont{1 ^ +length add dict `{1 ^/FID ne{d}{! !}?}forall & E}b/EncodeDict 11 dict d/bullets +{{/bullet}repeat}b/rF{3 copyfont @ ` ~ EncodeDict ~ get/Encoding ~ 3 ^/0 eq{& +/CharStrings known{CharStrings/Eth known not{! EncodeDict/ANSIEncodingOld get} +if}if}if d E}b/mF{@ 7 1 $ findfont ~{@/Encoding get @ StandardEncoding eq{! T}{ +{ISOLatin1Encoding}stopped{! F}{eq}?{T}{@ ` T 32 1 127{Encoding 1 ^ get +StandardEncoding 3 -1 $ get eq and}for E}?}?}{F}?{1 ^ ~ rF}{0 copyfont}? 6 -2 $ +! ! ~ !/pd_charset @ where{~ get 128 eq{@ FDV 2 copy get @ length array copy +put pd_CoverFCRange}if}{!}? 2 ^ ~ definefont fM 5 4 -1 $ put fM 4 0 put fM +makefont Pscript_Windows_Font 3 1 $ put}b/sLT{: Lw -M currentpoint snap M 0 - 0 +Lc K ;}b/xUP null d/yUP null d/uW null d/xSP null d/ySP null d/sW null d/sSU{N +/uW ~ d/yUP ~ d/xUP ~ d}b/sU{xUP yUP uW sLT}b/sST{N/sW ~ d/ySP ~ d/xSP ~ d}b/sT +{xSP ySP sW sLT}b/sR{: + R 0 0 M}b/sRxy{: matrix astore concat 0 0 M}b/eR/; , d +/AddOrigFP{{&/FontInfo known{&/FontInfo get length 6 add}{6}? dict ` +/WinPitchAndFamily ~ d/WinCharSet ~ d/OrigFontType ~ d/OrigFontStyle ~ d +/OrigFontName ~ d & E/FontInfo ~ d}{! ! ! ! !}?}b/mFS{makefont +Pscript_Windows_Font 3 1 $ put}b/mF42D{0 copyfont `/FontName ~ d 2 copy ~ sub 1 +add dict `/.notdef 0 d 2 copy 1 ~{@ 3 ^ sub Encoding ~ get ~ d}for & E +/CharStrings ~ d ! ! & @ E/FontName get ~ definefont}b/mF42{15 dict ` @ 4 1 $ +FontName ~ d/FontType 0 d/FMapType 2 d/FontMatrix[1 0 0 1 0 0]d 1 ^ 254 add 255 +idiv @ array/Encoding ~ d 0 1 3 -1 $ 1 sub{@ Encoding 3 1 $ put}for/FDepVector +Encoding length array d/CharStrings 2 dict `/.notdef 0 d & E d 0 1 Encoding +length 1 sub{@ @ 10 lt{! FontName length 1 add string}{100 lt{FontName length 2 +add string}{FontName length 3 add string}?}? @ 0 FontName @ length string cvs +putinterval @ 3 -1 $ @ 4 1 $ 3 string cvs FontName length ~ putinterval cvn 1 ^ +256 mul @ 255 add 3 -1 $ 4 ^ findfont mF42D FDepVector 3 1 $ put}for & @ E +/FontName get ~ definefont ! ! ! mF}b/mF_OTF_V{~ ! ~ ! 4 -1 $ ! findfont 2 ^ ~ +definefont fM @ @ 4 6 -1 $ neg put 5 0 put 90 matrix R matrix concatmatrix +makefont Pscript_Windows_Font 3 1 $ put}b/mF_TTF_V{3{~ !}repeat 3 -1 $ ! +findfont 1 ^ ~ definefont Pscript_Windows_Font 3 1 $ put}b/UmF{L2? +{Pscript_Windows_Font ~ undef}{!}?}b/UmF42{@ findfont/FDepVector get{/FontName +get undefinefont}forall undefinefont}b +%%EndResource +end reinitialize +F /F0 0 /0 F /TTEC2o00 mF +/F0SA7 F0 [167 0 0 -167 0 0 ] mFS +F0SA7 Ji +4696 1120 M <010203030405>[111 93 93 93 46 0]xS +3600 VM? + +currentfile eexec +9e67edc6b841305d5d10e5a53359c38b0291a4f57acae0c56237cee47bc1 +d85570b1414b43fc17ea6b4843d55ac9afa7067f1a7091b4594d913de276 +a8772313a65fcd26ba87b9a05d166b03e17f03277dd8efccb02a7d4c1be6 +177e723f7aa9e190ce43dd1df2bf2988559fa94bfa641911cece0e747ceb +9b660904152a628a244fd923b311f5c4a5fe7c546e8d37afebee19511e85 +7ff39e7ff6c4792d53badbc7a555b283f38f31e279752d4342dd5f00e99d +ba2152623e1e346ef7276b3265bc6cc3a37e315df96fd5d085e519b5cf03 +fb27cf9385ba7058ff6c83c880bff9c4fbd2947bdc5c671ae82a44177042 +f439578104f7c75f2ba09f3a578b522774bde2cbc6643d623a5e689df5bd +359ed5f335c5b979036b99e788351b92cb83205fff7dfc1b4880b7c6f468 +edd5346a15139d558c3bc6afd4767b4d9529a0b1aa4767bc65f3a158d720 +6b2b276cc6eb3b50ea5319f6a5b9f96114b77ee5ff8b0d84786036821196 +10d2ea5e2af2f62d8e94dfa5e9d87f303e6969e9121676a20da78c247202 +97cf246bcdca069951c2ca4294017dbf317ba60a54367a75dcb0c005394f +2e21d22fc8f1ca437c52566a26569f6f218d87831bbb59f9d7ce80d28c89 +c77c8ae2b608c786ebca7c5c5a7b7ded13c1007bc6484e8151dc558cb6f0 +6056b74666e6cdb8c0ccdc65044d55b68497ebec08ea9f2c661760595438 +8dfea6f0743c11811fd26f2837f954ef0a99db60eb9c3e1b523e0762deec +c717a44bfc75d4b55b7b8719218283ecd5e23ccbcc9bc1893cd9dda88922 +be1f24e77c46fbafd369868830f7ac384a338b2dde52ac79f83047febbb7 +a1adfd3f3ea13de8dbb63607beec48b0b5957be43431e98c34591c3ce646 +5c30ed78f1a8d521a4349671263c640e277d310adf33cae19cfdc350adff +14c02e0b73c1a80c0b97e5974cd751a144d34ca579b5cb81d8e0f230dbb8 +2d306f969dbd71108cc52e7338359ca95bc1873c1c91be7b51240fc14001 +98c8f64796e991eea99e27eba7bdac1f2296da2c6db2cdbcc4d7538af40d +5cd881a349dbc71725ab9bf815736c339b0f5aec8f6c4ca0438ecca51f39 +130895a4e7fd438813034129b8a838589b370000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTEC2o00 findfont /Encoding get +dup 6 /P put +dup 7 /a put +dup 8 /g put +dup 9 /space put +pop +4696 13024 M <0607080309>[111 93 93 93 0]xS +5132 13024 M <05>S +19800 VM? +11 dict begin +/FontName /TTBC013398o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1add2c77631f898ffcae76502bbe5e22d7ef71c602e1 +9e22c890817f47e70d08803467d31dd4454c7e898bf1e600f73ba7788118 +7a31575a7bde4b80b1052323a8cd8606039f631424bead9a04865f2b6ccd +563650769cf3b9f4ec66fa0b354b1389beaff83c6934509010d5c85f025f +31060982b13953fa166bd5a265f4594dd80728aad8dbc710567ddbed093f +27b08481959f39d5ea87844272e351c3b107807046866c6efdb34ab1a02a +4560b58fd36e23b92ffe3af9cc87a0bcbebea7877536640c59261a3a850a +0941a1da1349cafaf520ac0b488e6dd848ded092875c1ddfbb53986369d2 +ea38f05fc71a0f819904a116f9de8d4281e77df87763452fd42258656862 +4ee87f6acc7b7e1de1128cffce1168ba4f0f231290002f98b6bd2bc60a37 +f305d9515113ceba5d077871c967bffa3d810d8b4355895fdb320c155536 +880c517ea5384f01027eae42fb1a1cf3b4105a4bd7287b950000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTBC013398o00 findfont /Encoding get +dup 1 /one put +dup 2 /five put +pop +F /F1 0 /0 F /TTBC013398o00 mF +/F1S5BA F1 [1466 0 0 -1466 0 0 ] mFS +F1S5BA Ji +1459 3161 M <0102>[815 0]xS +900 VM? + +currentfile eexec +9e67edc6b841305af19a6e4bb2a230e3e9efc9b96f464cd2cec0584bfa5d +e6b6c8bf4fb2bca3ff5c4ffdcb930b9549cfaa6d954b63169b356002d4a2 +065b3dad6c77543f2f4c58aba309a5f2e2cec5372d5eb49ba5adffe6ec0d +ed20ee879de2476ee6f4099e560589a666b9194b6bf7f0128e1a3afd80ec +9f40a396884744c1962e90eba74a9cd4a32f9fdd0782f0c6b6d12f732bee +20b6ac0c3bfba90b08742c53ddc1970000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTBC013398o00 findfont /Encoding get +dup 3 /colon put +pop +3123 3161 M <03>S +900 VM? + +currentfile eexec +9e67edc6b841305af19a6e4bb2a230e3e9efc9b96f464cd2cec0584bfa5d +e6b6c8bf4fb2bca3ff5c4ffdcb930b9549cfaa6d954b63169b356002d4a2 +065b3dad6c77543f2f4c58abba975b6391782ae96f027086c2b7fc4d3f90 +351b67f8a2fc2116477655cf0dff5a6bf15f1a3d629270d6af26f69b32a3 +312831823f86f43a0ab84649de6044d445b8ed1fbd9a8f026fbac386a0e1 +c5428153a9d4e786021ed524ba1216a3b8ab60edfbf05959d5558b762ca6 +ffa65d882d930f795bc1903885698b5558100097185b7cacdbe4413bc735 +faa8d6a05f03b5bcb23f73372cbb5f7cd01ce3e3bb2e524201be263c6e0c +f04205a026405c90467d80e06d42e97c1af53a494a1c86c7a93c034ec9a1 +58c34d868fc499aa20961ab79c8fd94237c294a6d7569b8cddbab704dca3 +ab7466244b990000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTBC013398o00 findfont /Encoding get +dup 4 /zero put +pop +4201 3161 M <0404>[815 0]xS +5865 3161 M <03>S +900 VM? + +currentfile eexec +9e67edc6b841305af19a6e4bb2a230e3e9efc9b96f464cd2cec0584bfa5d +e6b6c8bf4fb2bca3ff5c4ffdcb930b9549cfaa6d954b63169b356002d4a2 +065b3dad6c77543f2f4c58abb474233ea80ce809e35265271e29a645609a +f19523b459da829c3beb337f4e916de7baa7dd40e381e60e1d68dd6dc672 +318ee6d51a4977d970db3ae073fa94a7f5afcd21e06e8476d782a2865dd3 +2a9c235bd5f3c5f1f327252a54d27bae21d8962686e2aa6912c72c946bed +83223cfc201da7c3f18870a82efce4ad7f1c996c4d99903969225ed21444 +37bc8415a6f4b6d44e30c3d0e47b6d6945d1536311137281dee93fc9a238 +a6036c912e79e0ebe6ecb3d20cd3093cccd00d504fa49f3c0efe04da2103 +3e167528183bdb7896175c77778fde8f0d0b65cb28281e8869747cde7f28 +94c91c302ba109d3ae45ff70f1999a40d8e9a33bd9ce6b8b22961db9c435 +a39d612dba6c4fcc51231f651c91bd0b0724b13d8d8e0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTBC013398o00 findfont /Encoding get +dup 5 /three put +pop +6943 3161 M <0405>[815 0]xS +LH +(%%[Page: 1]%%) = +%%PageTrailer + +%%Trailer +%%BoundingBox: 18 18 577 824 +%%DocumentNeededResources: +%%DocumentSuppliedResources: +%%+ procset Pscript_WinNT_ErrorHandler 5.0 0 +%%+ procset Pscript_FatalError 5.0 0 +%%+ procset Pscript_Win_Basic 5.0 0 +%%+ procset Pscript_Win_Utils_L2 5.0 0 +%%+ procset Pscript_Text 5.0 0 +Pscript_WinNT_Incr dup /terminate get exec +ehsave restore +%%Pages: 1 +(%%[LastPage]%%) = +%%EOF +
\ No newline at end of file diff --git a/testgraphical/references/wntmsci/singletest/eis-test.odt.pdf b/testgraphical/references/wntmsci/singletest/eis-test.odt.pdf Binary files differnew file mode 100644 index 000000000000..0654d52c11a8 --- /dev/null +++ b/testgraphical/references/wntmsci/singletest/eis-test.odt.pdf diff --git a/testgraphical/references/wntmsci/singletest/eis-test.odt.ps b/testgraphical/references/wntmsci/singletest/eis-test.odt.ps new file mode 100644 index 000000000000..968c7b3cbd44 --- /dev/null +++ b/testgraphical/references/wntmsci/singletest/eis-test.odt.ps @@ -0,0 +1,1984 @@ +%!PS-Adobe-3.0 +%%Title: eis-test +%%Creator: PScript5.dll Version 5.2.2 +%%CreationDate: 5/17/2010 13:9:19 +%%For: ll93751 +%%BoundingBox: (atend) +%%Pages: (atend) +%%Orientation: Portrait +%%PageOrder: Special +%%DocumentNeededResources: (atend) +%%DocumentSuppliedResources: (atend) +%%DocumentData: Clean7Bit +%%TargetDevice: (Generic Printer For MSWord Testing) (1) 1 +%%LanguageLevel: 2 +%%EndComments + +%%BeginDefaults +%%PageBoundingBox: 18 18 577 824 +%%ViewingOrientation: 1 0 0 1 +%%EndDefaults + + +%%BeginProlog +%%BeginResource: file Pscript_WinNT_ErrorHandler 5.0 0 +/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false +setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype +ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch +def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0 +rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def +/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def +typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72 +def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp +exch def prnt}readonly def/cvsprint{=string cvs tprint( )tprint}readonly def +/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype +{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(-- )tprint} +readonly def/marktype{pop(-mark- )tprint}readonly def/dicttype{pop +(-dictionary- )tprint}readonly def/nulltype{pop(-null- )tprint}readonly def +/filetype{pop(-filestream- )tprint}readonly def/savetype{pop(-savelevel- ) +tprint}readonly def/fonttype{pop(-fontid- )tprint}readonly def/nametype{dup +xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint +tprint(\))tprint}{pop(-string- )tprint}ifelse}readonly def/arraytype{dup rcheck +{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(]) +tprint}ifelse}{pop(-array- )tprint}ifelse}readonly def/packedarraytype{dup +rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint} +forall(])tprint}ifelse}{pop(-packedarray- )tprint}ifelse}readonly def/courier +/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin +$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0 +ne{grestoreall}if errorname(VMerror)ne{showpage}if initgraphics courier setfont +lmargin 720 moveto errorname(VMerror)eq{userdict/ehsave known{clear userdict +/ehsave get restore 2 vmreclaim}if vmstatus exch pop exch pop PrtVMMsg}{ +(ERROR: )prnt errorname prnt nl(OFFENDING COMMAND: )prnt/command load prnt +$error/ostack known{nl nl(STACK:)prnt nl nl $error/ostack get aload length{==} +repeat}if}ifelse systemdict/showpage get exec(%%[ Error: )print errorname +=print(; OffendingCommand: )print/command load =print( ]%%)= flush}if end end +end}dup 0 systemdict put dup 4 $brkpage put bind readonly put/currentpacking +where{pop/setpacking where{pop oldpack setpacking}if}if +%%EndResource +userdict /Pscript_WinNT_Incr 230 dict dup begin put +%%BeginResource: file Pscript_FatalError 5.0 0 +userdict begin/FatalErrorIf{{initgraphics findfont 1 index 0 eq{exch pop}{dup +length dict begin{1 index/FID ne{def}{pop pop}ifelse}forall/Encoding +{ISOLatin1Encoding}stopped{StandardEncoding}if def currentdict end +/ErrFont-Latin1 exch definefont}ifelse exch scalefont setfont counttomark 3 div +cvi{moveto show}repeat showpage quit}{cleartomark}ifelse}bind def end +%%EndResource +userdict begin/PrtVMMsg{vmstatus exch sub exch pop gt{[ +(Dieser Druckauftrag erfordert mehr Speicher, als auf diesem Drucker vorhanden ist. ) +100 500 +(Versuchen Sie es mit einer oder mehreren der folgenden Methoden und drucken Sie dann erneut:) +100 485(Whlen Sie fr das Ausgabeformat die Option "Optimale Portierung".)115 +470 +(Stellen Sie sicher, da auf der Registerkarte "Gerteeinstellungen" die Angabe fr "Verfgbarer Postscript-Speicher" korrekt ist.) +115 455(Reduzieren Sie die Anzahl der im Dokument verwendeten Schriftarten. ) +115 440(Drucken Sie das Dokument in verschiedenen Teilstcken. )115 425 12 +/Times-Roman showpage(%%[ PrinterError: Low Printer VM ]%%)= true FatalErrorIf} +if}bind def end version cvi 2016 ge{/VM?{pop}bind def}{/VM? userdict/PrtVMMsg +get def}ifelse +105000 VM? +%%BeginResource: file Pscript_Win_Basic 5.0 0 +/d/def load def/,/load load d/~/exch , d/?/ifelse , d/!/pop , d/`/begin , d/^ +/index , d/@/dup , d/+/translate , d/$/roll , d/U/userdict , d/M/moveto , d/- +/rlineto , d/&/currentdict , d/:/gsave , d/;/grestore , d/F/false , d/T/true , +d/N/newpath , d/E/end , d/Ac/arc , d/An/arcn , d/A/ashow , d/D/awidthshow , d/C +/closepath , d/V/div , d/O/eofill , d/L/fill , d/I/lineto , d/-c/curveto , d/-M +/rmoveto , d/+S/scale , d/Ji/setfont , d/Lc/setlinecap , d/Lj/setlinejoin , d +/Lw/setlinewidth , d/Lm/setmiterlimit , d/sd/setdash , d/S/show , d/LH/showpage +, d/K/stroke , d/W/widthshow , d/R/rotate , d/L2? false/languagelevel where{pop +languagelevel 2 ge{pop true}if}if d L2?{/xS/xshow , d/yS/yshow , d/zS/xyshow , +d}if/b{bind d}bind d/bd{bind d}bind d/xd{~ d}bd/ld{, d}bd/bn/bind ld/lw/Lw ld +/lc/Lc ld/lj/Lj ld/sg/setgray ld/ADO_mxRot null d/self & d/OrgMx matrix +currentmatrix d/reinitialize{: OrgMx setmatrix[/TextInit/GraphInit/UtilsInit +counttomark{@ where{self eq}{F}?{cvx exec}{!}?}repeat cleartomark ;}b +/initialize{`{/Pscript_Win_Data where{!}{U/Pscript_Win_Data & put}?/ADO_mxRot ~ +d/TextInitialised? F d reinitialize E}{U/Pscript_Win_Data 230 dict @ ` put +/ADO_mxRot ~ d/TextInitialised? F d reinitialize}?}b/terminate{!{& self eq +{exit}{E}?}loop E}b/suspend/terminate , d/resume{` Pscript_Win_Data `}b U ` +/lucas 21690 d/featurebegin{countdictstack lucas[}b/featurecleanup{stopped +{cleartomark @ lucas eq{! exit}if}loop countdictstack ~ sub @ 0 gt{{E}repeat} +{!}?}b E/snap{transform 0.25 sub round 0.25 add ~ 0.25 sub round 0.25 add ~ +itransform}b/dsnap{dtransform round ~ round ~ idtransform}b/nonzero_round{@ 0.5 +ge{round}{@ -0.5 lt{round}{0 ge{1}{-1}?}?}?}b/nonzero_dsnap{dtransform +nonzero_round ~ nonzero_round ~ idtransform}b U<04>cvn{}put/rr{1 ^ 0 - 0 ~ - +neg 0 - C}b/irp{4 -2 $ + +S fx 4 2 $ M 1 ^ 0 - 0 ~ - neg 0 -}b/rp{4 2 $ M 1 ^ 0 +- 0 ~ - neg 0 -}b/solid{[]0 sd}b/g{@ not{U/DefIf_save save put}if U/DefIf_bool +2 ^ put}b/DefIf_El{if U/DefIf_bool get not @{U/DefIf_save get restore}if}b/e +{DefIf_El !}b/UDF{L2?{undefinefont}{!}?}b/UDR{L2?{undefineresource}{! !}?}b +/freeVM{/Courier findfont[40 0 0 -40 0 0]makefont Ji 2 vmreclaim}b/hfRedefFont +{findfont @ length dict `{1 ^/FID ne{d}{! !}?}forall & E @ ` ~{/CharStrings 1 +dict `/.notdef 0 d & E d}if/Encoding 256 array 0 1 255{1 ^ ~/.notdef put}for d +E definefont !}bind d/hfMkCIDFont{/CIDFont findresource @ length 2 add dict `{1 +^ @/FID eq ~ @/XUID eq ~/UIDBase eq or or{! !}{d}?}forall/CDevProc ~ d/Metrics2 +16 dict d/CIDFontName 1 ^ d & E 1 ^ ~/CIDFont defineresource ![~]composefont !} +bind d +%%EndResource +%%BeginResource: file Pscript_Win_Utils_L2 5.0 0 +/rf/rectfill , d/fx{1 1 dtransform @ 0 ge{1 sub 0.5}{1 add -0.5}? 3 -1 $ @ 0 ge +{1 sub 0.5}{1 add -0.5}? 3 1 $ 4 1 $ idtransform 4 -2 $ idtransform}b/BZ{4 -2 $ +snap + +S fx rf}b/rs/rectstroke , d/rc/rectclip , d/UtilsInit{currentglobal{F +setglobal}if}b/scol{! setcolor}b/colspA/DeviceGray d/colspABC/DeviceRGB d +/colspRefresh{colspABC setcolorspace}b/SetColSpace{colspABC setcolorspace}b +/resourcestatus where{!/ColorRendering/ProcSet resourcestatus{! ! T}{F}?}{F}? +not{/ColorRendering<</GetHalftoneName{currenthalftone @/HalftoneName known{ +/HalftoneName get}{!/none}?}bn/GetPageDeviceName{currentpagedevice @ +/PageDeviceName known{/PageDeviceName get @ null eq{!/none}if}{!/none}?}bn +/GetSubstituteCRD{!/DefaultColorRendering/ColorRendering resourcestatus{! ! +/DefaultColorRendering}{(DefaultColorRendering*){cvn exit}127 string +/ColorRendering resourceforall}?}bn>>/defineresource where{!/ProcSet +defineresource !}{! !}?}if/buildcrdname{/ColorRendering/ProcSet findresource ` +mark GetHalftoneName @ type @/nametype ne ~/stringtype ne and{!/none}if(.) +GetPageDeviceName @ type @/nametype ne ~/stringtype ne and{!/none}if(.)5 ^ 0 5 +-1 1{^ length add}for string 6 1 $ 5 ^ 5{~ 1 ^ cvs length 1 ^ length 1 ^ sub +getinterval}repeat ! cvn 3 1 $ ! ! E}b/definecolorrendering{~ buildcrdname ~ +/ColorRendering defineresource !}b/findcolorrendering where{!}{ +/findcolorrendering{buildcrdname @/ColorRendering resourcestatus{! ! T}{ +/ColorRendering/ProcSet findresource ` GetSubstituteCRD E F}?}b}? +/selectcolorrendering{findcolorrendering !/ColorRendering findresource +setcolorrendering}b/G2UBegin{findresource/FontInfo get/GlyphNames2Unicode get +`}bind d/G2CCBegin{findresource/FontInfo get/GlyphNames2HostCode get `}bind d +/G2UEnd{E}bind d/AddFontInfoBegin{/FontInfo 8 dict @ `}bind d/AddFontInfo{ +/GlyphNames2Unicode 16 dict d/GlyphNames2HostCode 16 dict d}bind d +/AddFontInfoEnd{E d}bind d/T0AddCFFMtx2{/CIDFont findresource/Metrics2 get ` d +E}bind d +%%EndResource +end +%%EndProlog + +%%BeginSetup +statusdict begin (%%[ ProductName: ) print product print ( ]%%)= flush end +[ 1 0 0 1 0 0 ] false Pscript_WinNT_Incr dup /initialize get exec +featurebegin{ +%%BeginNonPPDFeature: JobTimeout 0 +0 /languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/JobTimeout 4 -1 roll put setuserparams}{statusdict/setjobtimeout get exec}ifelse +%%EndNonPPDFeature +}featurecleanup + +featurebegin{ +%%BeginNonPPDFeature: WaitTimeout 300 +300 /languagelevel where{pop languagelevel}{1}ifelse 2 ge{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}{statusdict/waittimeout 3 -1 roll put}ifelse +%%EndNonPPDFeature +}featurecleanup + +featurebegin{ +%%BeginFeature: *InputSlot ManualFeed + +<< /ManualFeed true /Policies << /ManualFeed 1 >> >> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Duplex None + +<</Duplex false /Tumble false + /Policies << /Duplex 1 /Tumble 1 >> +>> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *PageRegion A4 +<</PageSize [595 842] /ImagingBBox null>> setpagedevice +%%EndFeature +}featurecleanup +featurebegin{ +%%BeginFeature: *Resolution 1200x1200dpi + + 1 dict dup /HWResolution [1200 1200] put setpagedevice +%%EndFeature +}featurecleanup +1 setlinecap 1 setlinejoin +/mysetup [ 72 1200 V 0 0 -72 1200 V 18 824.0003 ] def +%%EndSetup + +userdict begin /ehsave save def end +%%Page: 1 1 +%%PageBoundingBox: 18 18 577 824 +%%EndPageComments +%%BeginPageSetup +/DeviceRGB dup setcolorspace /colspABC exch def +mysetup concat colspRefresh +%%EndPageSetup + +0 0 0 1 scol 25200 VM? +11 dict begin +/FontName /TTA55o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb22066084a75e287a6b21 +7d5ead11cee92565651ea4f1d618325c70b09fa582d2eca5e5c5deea3be0 +b1103a2db20dd69d0ed4b12a762ee64108282b8d83f8d25f9b0608098b16 +460b06a011c4da3f1e637f7ceebc2c8c5e93750ddf750a5c367617f3ede0 +a6cce86a134ca76a529adbcaeb6269451c7420c09daca772307efbb571ee +ca3a4465c4c2c3d07e2e4a4d48c613544563cea572138daa08d3f5cf8000 +48b9a9565dad61504d768972a63af0d028d75c4659f9cca991fb4b69a2bd +6e431e8b0e6a12e9dcc103601275d759cab9eeadc4460c47826081779cba +93705992909858e7649b160152d7bf68815571de7b523535e3f769594f22 +6903dcade6a25b8812844738e33c7cb6fcaee97f7e0d8603cd3dc3ff06a8 +773abda4287715d753d213526621e7b9bd20a1d7c760b92a1abcd504356e +4d33dafc982a531bd06a84380c708eb3650d88f88d440ded48d8d3ce7678 +a965d8469f5931134fe32d1a371bfd25667b18e588de27003a6758c36c0e +a3d1550756abfd014ccbd822aebd05c03521ded77a70cbc5a58c47def657 +79dab92fed044a48697ae300bc4ea5a33620bfcde234c944b214a9c2d562 +d369051015084e6cbf286344a22b3f1003133679dc6962df21405aa70d6b +725b8f8a37436c2f12a9cf0eb097dbda2dd417b2c2e6eb0ac571bc00b5e5 +93817cce74217395cc079c8222746172fd669a96cb65e23828a2a4b1ff2c +93428a8c2738b0c42e14b93725d2907b0352a41c50fef53b7a13daeb06b6 +d1f339ee6f2cd8c8fa1154c733b17a2f3ac716ad02da5459abfc16b83ab3 +9fc018038386e7065f68be925cebb5f86a1112a2657cd4c5a741c5e7b520 +be2a0dfcf072d331964cb6065f51531606db141ad04b59b2aea886c83024 +feccd6a378c41dc2bacf17907885e03384773ce94735dc19022f0d171df4 +4322ad309a02ddf3455ba4c822cddaa3b0b0552dbdd354bbd279223a6b54 +a55fd4b0d5570543709083a26e944bce2feb3c09d9ea02a4851b70bf4a24 +7892c3d0bb0483daae9b9a9dc5acd3955a9e213c7ca9b51bc1a3a97eae3e +67abaf6e26d68e27bbfd9a05b30474a1ef758ed08ae5423f0e430efdf23a +6149cf11ecd234c9d48aca961f1cdaafa375f9e488605876fc32ad44b2da +abb0e23a05b2e35412aef4dc77dbae93b2bc47f7b284d5f3e12dbc56a1fa +971a5c5be62ef903e4f54edd9dddea7c3908546ff5dd4bda3079624a9a22 +9cbb4c84ac0b4f68a19b24a88d2068b8074c21eb35ef43789a3588b32710 +4558187555465bfed7858029c1f7f30f942ae86dff06d1f8f2da8cf8b330 +a1260fb9bb4648d8fccfc12f295164eac890dea6d03091bd25c91db21856 +e1023ae08ea96af37790bcab40398f35122b6287f3e0ba266b563cd5e09b +117b848b20d986fc6f08d53a5115263e91e84448ce2052e731ba5ac2274a +3cfe116473da78d88a3980ab570e9d8afe870905da9620ef3c55b859f825 +a7239fd31d4a6a5ea67381a26e68dd48a07d7b2e9396ebd861b3f55e04a2 +b0cb2a2dc1c20e2919cd3981883acea06c47700adc875197fd05cf4dee96 +e3847d7e7cad37e3d62536f36bf7e9b39fed99c8e18564b030417d7c46d7 +73edfc7c97506df2ee5dadc76b03c19d17444c5d529641aa20fd07d50f62 +85d1ea902c58baa75ed6f2236c1904605a89c333160a190d92068c03982a +8bfc3b3968487f940314478274337863c0e7c797435dab9758bb85240e4a +59345b67492edfe7a3c00d6626c663bf7577f4012bcdc438fd37e32f5785 +cd124fab0681605098048f77aec3819aab4de3ba73bfea197c50c4284225 +3008b38a77151400eeeaf84ea6d1e8a26f9463baef55137b53a4460000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA55o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +Pscript_WinNT_Incr begin +%%BeginResource: file Pscript_Text 5.0 0 +/TextInit{TextInitialised? not{/Pscript_Windows_Font & d/TextInitialised? T d +/fM[1 0 0 1 0 0]d/mFM matrix d/iMat[1 0 0.212557 1 0 0]d}if}b/copyfont{1 ^ +length add dict `{1 ^/FID ne{d}{! !}?}forall & E}b/EncodeDict 11 dict d/bullets +{{/bullet}repeat}b/rF{3 copyfont @ ` ~ EncodeDict ~ get/Encoding ~ 3 ^/0 eq{& +/CharStrings known{CharStrings/Eth known not{! EncodeDict/ANSIEncodingOld get} +if}if}if d E}b/mF{@ 7 1 $ findfont ~{@/Encoding get @ StandardEncoding eq{! T}{ +{ISOLatin1Encoding}stopped{! F}{eq}?{T}{@ ` T 32 1 127{Encoding 1 ^ get +StandardEncoding 3 -1 $ get eq and}for E}?}?}{F}?{1 ^ ~ rF}{0 copyfont}? 6 -2 $ +! ! ~ !/pd_charset @ where{~ get 128 eq{@ FDV 2 copy get @ length array copy +put pd_CoverFCRange}if}{!}? 2 ^ ~ definefont fM 5 4 -1 $ put fM 4 0 put fM +makefont Pscript_Windows_Font 3 1 $ put}b/sLT{: Lw -M currentpoint snap M 0 - 0 +Lc K ;}b/xUP null d/yUP null d/uW null d/xSP null d/ySP null d/sW null d/sSU{N +/uW ~ d/yUP ~ d/xUP ~ d}b/sU{xUP yUP uW sLT}b/sST{N/sW ~ d/ySP ~ d/xSP ~ d}b/sT +{xSP ySP sW sLT}b/sR{: + R 0 0 M}b/sRxy{: matrix astore concat 0 0 M}b/eR/; , d +/AddOrigFP{{&/FontInfo known{&/FontInfo get length 6 add}{6}? dict ` +/WinPitchAndFamily ~ d/WinCharSet ~ d/OrigFontType ~ d/OrigFontStyle ~ d +/OrigFontName ~ d & E/FontInfo ~ d}{! ! ! ! !}?}b/mFS{makefont +Pscript_Windows_Font 3 1 $ put}b/mF42D{0 copyfont `/FontName ~ d 2 copy ~ sub 1 +add dict `/.notdef 0 d 2 copy 1 ~{@ 3 ^ sub Encoding ~ get ~ d}for & E +/CharStrings ~ d ! ! & @ E/FontName get ~ definefont}b/mF42{15 dict ` @ 4 1 $ +FontName ~ d/FontType 0 d/FMapType 2 d/FontMatrix[1 0 0 1 0 0]d 1 ^ 254 add 255 +idiv @ array/Encoding ~ d 0 1 3 -1 $ 1 sub{@ Encoding 3 1 $ put}for/FDepVector +Encoding length array d/CharStrings 2 dict `/.notdef 0 d & E d 0 1 Encoding +length 1 sub{@ @ 10 lt{! FontName length 1 add string}{100 lt{FontName length 2 +add string}{FontName length 3 add string}?}? @ 0 FontName @ length string cvs +putinterval @ 3 -1 $ @ 4 1 $ 3 string cvs FontName length ~ putinterval cvn 1 ^ +256 mul @ 255 add 3 -1 $ 4 ^ findfont mF42D FDepVector 3 1 $ put}for & @ E +/FontName get ~ definefont ! ! ! mF}b/mF_OTF_V{~ ! ~ ! 4 -1 $ ! findfont 2 ^ ~ +definefont fM @ @ 4 6 -1 $ neg put 5 0 put 90 matrix R matrix concatmatrix +makefont Pscript_Windows_Font 3 1 $ put}b/mF_TTF_V{3{~ !}repeat 3 -1 $ ! +findfont 1 ^ ~ definefont Pscript_Windows_Font 3 1 $ put}b/UmF{L2? +{Pscript_Windows_Font ~ undef}{!}?}b/UmF42{@ findfont/FDepVector get{/FontName +get undefinefont}forall undefinefont}b +%%EndResource +end reinitialize +F /F0 0 /0 F /TTA55o00 mF +/F0S64 F0 [100 0 0 -100 0 0 ] mFS +F0S64 Ji +4483 738 M <0102030405060708>[61 30 57 35 61 44 39 0]xS +25200 VM? +11 dict begin +/FontName /TTA56o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb2206689a2c7f31c3571c +8737a397efefad52089b0a63555d3209d1f3499e5f079b0179d26bd1a32a +7bf160e83323b466debc925db378cff20fe2ba66a466a4d8e1d2a6615e05 +93a54552fe19a6e69b359af73bdf13ed8417dc9fc8dc3f18af93902e4197 +b017bff7f07009d52cf468581f6a23267d555fa25bef058e1ac4f1bf710a +4067b25bf8ed2fd76a56a21222c35beb89a1e778c0ca1c10db6fad771b1b +85771340b80523ff61971323b189e5cd4f8666eabccd1bd2aa658224cc84 +a8652949369fd109f7da580efd0ef48637981305ef31dd2654b818529b95 +81188e00d73117aaf12858765156a2ee8b290fc3b1ad7f8500e5fdf3a784 +bcd5a3d1d8613b692b3fc5d88ba80b961c093aca30c05de21307a42665dd +567218faaf8e7531b8658b777053fa437955fab3db6bcc47bf877b55850b +26ca2a1d2ae2f655f6939da944107009b124d97feab6b504be5d1d142fd6 +e7a2e0b1e5c51daf94eb93a43ce9ae7ebc4afba0c6dde00967e5ff15f6e7 +87af9d25ee37e13ab42bd3c6163335570877ec27d2e0b8a87083b7bd4e51 +f5a164659aec160554f0cf11eb2f253844b0a6adc1748c633f16f0ab1885 +3f25a36b4e80c4f742f83568920975e061327bf0a3a77e99b0bf948a068d +18a4723ea71d7048424ac7b39260fd0717446fc6916cd997742d088d4258 +d4301cef2f3cc8c632d9c0aea984131a59c77315ff1e282c26d745f499cb +4ad480715a91553e4dd0345774bdac173e3db6dab78f559da4b3ec76c473 +5d24af2afecb96535a5a6c956453f5ed7f00fdfff68025fd6667ffa85b3e +fc5bafa39cfbdba93d1e9054b5581daa9d37bbfba4f602f3766d61f275aa +7aa663a22d807494bff21a562eae0507e64bc74dc8d1a2f052b626539a73 +5d1a5832e7a89e886eb4db30ccac44725ef80f8215d2115764ff1dec4cf2 +4bfa1f30c36e3da7b69915d30cde7e205e8a9e780bdacc60f3bb715b00e8 +221669692a26d568e581e1b318334ac68fc818b4aae56f9bcb7c4dc7b749 +a083c67c5df50e02ddf9fbe5ab022acd31204913f32d7a8b47242c2de557 +cb452815625cb986e010e03c757188e99acdcff88b435c229c9fa7e762f4 +2823b4b32bbad7aefa65cca11515b4bd335afea1638e7ef8da3fa7f84626 +25c39e1a2ed855c06cc5f62152d2eafe46b9d11dca17173ec0955b1452af +531f67fabb234bd217a9aba25d1dcd411f90829c70932706ad453c184066 +f3981f10ec9d212029aec5fdbdbc0ee51d1808c0a7d911c3f039d4f5368d +0b8f0fbe6b67b888119a7f7bc24558be741e57ea649bf1d03f8a555aa600 +a90a69e471b6d8014264f1e3efa6c74e2a2f694c36bcaa713d16a2279073 +748d853fa087e61ef3db613d9112c861655a99de6a3e4a707c8d450eb68a +0a6959ce43b5437f338ef9f90a4a2f1611ac157c105a68770e2d00af10df +882fd6b4f100ecc610515e037112a012e306c2e6b684cc837e815971ed26 +6fcc6fa7f2fb5f83cb06d835731a5034e683ceb10e5402f41eddbd8302e1 +df211165be9eff0f2c296eb85d7ea8c667d86fc1a620504f5158dfb898e4 +72f7c46964e2ceaf85c9a892eff29d25bcc1e5297aa679976919f6c839f3 +d0f54de71a531116f4ed682f527c7f53d5c164517db6f807c1d20d37c022 +c5bd5e6a8da424c3e3d47689fb71fa07290f52db51c37d64b83207fca5a6 +9833ba0c2c3ab8c4d8d171c040863605ee1122166d712ad8c04475341da5 +86b1a501e0dae2d6726daac4b640945778ffc53c567618e47993dbba3ffa +82fbed8bd9f9eb3f0145870cb80b4429e582595ab561bcbb6dc15c889e3e +ac002d4fef28fd1b9422c142dfe50ababb2be2f385bd343ae40000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA56o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F1 0 /0 F /TTA56o00 mF +/F1S75 F1 [117 0 0 -117 0 0 ] mFS +F1S75 Ji +4454 869 M <0102030405060708>[70 40 65 39 71 50 47 0]xS +25200 VM? +11 dict begin +/FontName /TTA57o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb2206118c660a9cbf6d8e +4b94826b96ececa9599a7609dcee16efe1179b77c1b7f46a95a0ab7c17a5 +697836677e08c4eee7e9abfc4070a184ceafafef2726ec95228791901739 +e45003466c73dbc8c43a9c04969dbcfd8dd8cf15a19004cee3a14a49be6e +b91213a5ee7b0d2d584078f374b74774ed505dcdc8983311c8f8e03e9edb +9df6842ada6e161ed6a5b011b3f1c7320ded247da6deb3cd17a7ec0f397b +2415ea072df14348131a70acc1f7c7fbbfd3870b5f41e98d030d413cb08a +2845f8f1c697e10d8ac363d896f70864686afbee40d592ff2a9e75e3e361 +06444d8ee582de9d325fb883a53b6c68d362eaceeafa7048afa7430ccc45 +572995e53aad2bd2386c32d72665fe9d6964f038c062b01a43757a9ab52e +2cd852d6146f2232dfa51ead4a2b44b01c5832d54b88ed54c258aed0171b +b62cc9a580de1309215b9be7403d782f2bf09d2a9edd0f657647fdc4900a +22c529490ca9a42be2400c61acc09f4db4f7d500159c7a4e4e3ad5d4f112 +0507ba0052d9818e041afe07325886343f03c99f60cc1601307e85a68685 +691790d16bdb7d487a68e6e15d211ebeac2443efbed31a5512d98cacfdff +e34d638fdb613469cffd654f12c888fb2923930f739325fb86060b4acae3 +c1e5a887d8703feda1156c4d73c0e21813d748154bb54f8c24c1daf24601 +8792c263771d62affb085a58adbf11ab9599cb9dcda256cfe6909ffa616e +53434e3627483cb07b06d46eef74e18d985429a9e1ab75b933114b58082c +22cf52f6c86824e52d1ec597c6250f14a100499af35f259be3e328da8e47 +483a34be21f28bc8a3262a528199b63a9791d53121a622873f5e6987e883 +930912abd47d820cb61501acb111bb4b004abc7bd88ab6b8245fb7ed6917 +8a29a82d445ee37eefda5c108e2e5729338da717589f1aaf4bb384d05de0 +f8094fc57f0b38379014638d4e690feb342a7767052f75d630b35a14c266 +846a0a255e7012750b989aec755b5f382e79a9417c6fc1e67dd51ff6db64 +6105edd0f9db04526a56c1dafc9a5c3b2eec3e8b9cc15e6eaf81df891db3 +1e4a1578f50ae8b34485e77abb15bc441dfe8dbe345c23f8378de08d802e +6b1fd78d7f06217fcaf8737778d271c391cc56f2111f7600b59d683316dd +dc1c3721f4e1bf984f1c1922b989a852ea83eb7cc9e907fefaffab3777b5 +5b0f4b31ef5995c2e4d1f076a36c6dac984dab1fe574f6c30f9883f3adb3 +8104eba28e817d1c8845c2e339509afb6916f2e74a26335df0f2389652cb +b97a144bd0b34d282501f1ac84ec15b8ab7208be238220a6d45443928c3e +678a651ed615ab2419886ecb8170bca1de483c4bf773a2ace74003476dd4 +9cfa70f78ddb9b2d832b6da5cde76b8286c581c6e0855333f24c4a849b3b +0591099e36178aecee54d3a7d3aee7c2af5c84555f6a2b6d0090938f6a48 +177c4e5d34c0287c6b8c4a0dd59ad7ed951e296d122a8f174da1497fb317 +2426125f25cb184a7e89665539ecbc53e89416e28a146b933ab891ce7291 +db110571cc559ac79a8f06534d3aeb78af1fd90c1a62ee315df8e9ea58e1 +3003e4784c9354d1de15ee86207c70f572629fa6b62cad886aa18a39c2e9 +f2dd802c49542b085b88afcaae2ea3b3aca61ba5ffd9f4e3d2c1e9bdd3cf +d5669196623887a7a2016ef55d22f6b5d791e1b787bd8c234d2c715ce9b4 +0bcd0dee3a9ddcbb71bb1ddbf2a76cd4fb4f0d7d2b786a28905989ae899a +669a081cb20699ac39b91b6fc7a98870cabd07f2d54d666e66bf182334a9 +236157ad4379069afadc84bc9438bf76ca41bd153d38f64b5af32421d933 +0f54c7855f00031060c388dc4ef54a67ef866969cf47a6e684367c794f0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA57o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F2 0 /0 F /TTA57o00 mF +/F2S85 F2 [133 0 0 -133 0 0 ] mFS +F2S85 Ji +4424 1019 M <0102030405060708>[80 45 74 45 81 59 51 0]xS +25200 VM? +11 dict begin +/FontName /TTA58o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb22066a6b46d2cf1728ab +cda123ebf188b9a6b8b24cbe57d2fdc0fb1465e42a4a57f1b5de50d12264 +c2c52885376894a97a3c08ba53166de08d794b16c034e3260814dc36d7d5 +bd49c3cd5a16d882e9a1adc9ffc8fa13e3d736dd14a0f59c0e23b738cd57 +789aa9c1769a2a0780fc2c19fc708dfc6073d95f7be838edfc03cbae144a +378d7cf48890570309de33ee5d7cb65a04e574605763d16439afa2291a11 +03067d6228112b327dcf9ec9ffb4b4c5842fb3d130ce409f5838ceea1dfe +56bf53695ba7e626b7e902e190dea669301951796a841a0bedb5e51d3c09 +3e882413436423ef296308bdbd1ac60b84bc70376ea86c1b07062f7a204c +573da34342995ae05ec7dbf7853f2e5f9b9842c8ec74fa1d38c508ef3e13 +c69f19b5dfaa844e9cc5e3d791f36fae0adfc6a6e90069792294e2170e4d +ac265f7c0fdb3301ac4b0ff5ec185b21826fc4ac759a856acb923365268c +2939a33c5bb257385b099f89737dc9f92a81ffee9fd40483dc6e9e1918ce +cb7dc0141b3fb52a6f9326e075efd4c5296c39718ff35463da3ad067d02a +96d8b41a02f84adff5bb4f6950fbca87a3db27261f99d049c78ce3d75510 +788b537af73800fc21501b72ac3cfea52b9d86946fa2d807b50640efc784 +9492f277cbb4a451bccf504badbb0f5e0a8f6bb116d8c16ec3522fcaa2e1 +466cdd96ab803f47d4c8c206b5676909ece2e6db8dd88afacd31b9f5a670 +5daa6dbf84d3f053ba4261a8d3707311fa9d46bda5ae891aea4ad6b70360 +08628f733151a4f2262aadabac443b4dce72ce55c62968cc0205bca2e296 +41c53ad39c339efcc6ff63a56440b6109c071289a18024596d0840bc634b +fd0076c39db41e96443f89d1d79f6c796b3df419f8d19b9abebd474cba56 +f1b0be6e75199399666b1e5c297418a5e05575a85f4f596615ffdb47ea6f +79933ed05fba1911a87ec7985fe0acc52c074888943175fa52470b364398 +3a99eead59369a00556ee687c9ceed2e8a95d9dc1790034d2fa6a19919d1 +a43f10bcae5e14ef4ad036c7f44cb63f99f9a2cf4970b5760fa073a6c970 +eefd0ce5d2fa46af1b542149afe26804a834ac0a7f727ef8649d6af07667 +2724e5f7b6b25744e674bf9a5086196b7834df64bc3bcab2cd70a1fcc492 +b3e7afc80f72e3a84aa5d3e5c3c902d6032f41da6ae5e7340944e1f4bfb6 +85fc826248d897cff0897e4c590258f8df6c84c891f3b46abeabe0411cac +70b9abd20ef4324819bc49b28fb3df7e25381d9d21c276fc908aaabdc532 +6621c5cdcb3dc3dfa758584a9b8f86e7070ade12bfdd54b1f56947eb98a5 +a46745809b0edafabd19192517147c68d4dcd55b2bcd924955d09d8a363c +596a4e5f0b18e23813e70d5231def676dff793ad0f4af3ca4b279d5276c2 +adcdb87b00531a4ebeed39d836f09861386999c622bffdd5df501c7e7844 +6b559037fce2e95221391d4223368d705bb40bbe7d1a7a7f15c49686a9fe +418d72a2b9fff5bcd68b058633580ea72709a3d95779a06821f56d70febb +a767246ff6c567e7d4f3cf63c69551a37652aced5441e9e5df350d931420 +916a69ef9a880108df611eec29d502d08b073b78271c1b151774392639b7 +5cdbdc2045bd3a6f81086d8500e50d195207f3b4c289539cebaa82ee9d83 +05552788b36623ab12f103176a73856bfa4e6be9cc9897fc305b86829b30 +2c0b7287e514ef5e9b10733ed95ecf1b51121b9ad99f9becada0c85c7c1d +c8fe8e896c083bf9daebb69e529af516c09562c6bc8b50eef72f33b81e7f +08a88ff5be58bfccbd42f96a582ff3d3ba11218f82d121040d0fc501dd3c +fef1e5d184c959108f096bbd543980458a682ea0ad0b62ba31ceb3560000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA58o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F3 0 /0 F /TTA58o00 mF +/F3S96 F3 [150 0 0 -150 0 0 ] mFS +F3S96 Ji +4395 1188 M <0102030405060708>[92 50 83 50 91 68 57 0]xS +25200 VM? +11 dict begin +/FontName /TTA59o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb22061485d7d0c2a0dbf2 +930a8f5918a6862051241b27b50bcdabfaf3447ec6b9abe16f841c5bb191 +f22797fcdf6a8c8ff86f049be5c0235027cd0afec26ca4ec8f456e5fdca3 +48ec1263f3379ff320dac2de3bf289d44a586dbc7321cc21f6970a30ec04 +4c81bfe4cc4aad0c34c941050be71d47d6b71b17cdc52f5f4929234df4ce +8e8dda53ba1756d68ff2998920764c753c787ce2aad2b7318beedaf154cd +ed062e47828b15606957a37f2ed31c497b84f23af55a4be8ec19ec290bc0 +8b8a36d4f76ed450f2b6bd24d1ab0cb9733ded98d13d121ed6e61bea7f25 +535d7bb636e41d1e6c85066ad25a4129078090ff449da4901c333fff5a65 +3b109d418559dfcad8a3b95343e32949626ae79e1b9b76f34e85f8ad1d02 +45224ae5469e6de5f8ebe918e4243c58795f146dcd8fdb345ced4febbb37 +49447b9005b7e9da42f5d30c4760fc2fc25f01bd6cabee8635bc3b354b51 +4640db9cc5a1ffc3b043e11b946b86dba33ae4d62a6868a0563918626a9c +ab48b3a26ac63b32314dd3e73ffdb937da9fd8641213b6e421733bc26d75 +4436a44bb0374923869ba9d9e3ad5d720963b321d55c8a69622f6e513484 +cb56406691e8ebff011186c94bda3ae6d73b1ee31e0ab7a00d1ddc0a0add +9162daa7d98b701e411ef69cba5bab29143d51a6621fdbbc6c2786715312 +6abed7ad07ee21ea4aa2604ae9801151304692738429383a6be9e2420d35 +36706494a215bbc41a8b0720608803753eb09b8da2232ed01b25984e1ad2 +2ced31325125ae4f61f6c40c003e081c25e1648f36c734b9206e82780ff2 +d6890dfdba56a76379cb87ccd6a207a3e96ea78cf156ef86936224d070be +a4af0e4c33a1e9016db6a04374dfefe1190ff69f20c89991541c22cbeae9 +d716460f215a5e3cf1b3da78cd2fa5c732024001c91382dfb9cc28268f71 +6097460b697b27d156c66591da3701476c10f4a699da79d411353d984a44 +335227370be063f904c2ed3046c105d07d009f5586a254627bc02cc60086 +5ce2c25952b4ed43a867b1e4de7312dade167ead9739792765d1987c094b +611be118f5392f62b207aebe1855cf31d6cd93e85627a1314bfe1c99231b +3f5fcc8cdc99e8c843f553f264d4a676e700104c4f98640d95f912bb5c2f +21d3fd8ef0fa3759139bf3e24238c7571aae8f3db149822f24233c25d03b +e95c19deb5e0fb30f5ce473f81cfbcf25a3998b511c61e1c788aa5653bca +a78621a572a576df9bd271e38ad6de59995df949aa857ec90ddaaa3972bc +abecf967125d88bf8cd80f5864010b927ee8a77909505e8a0d84ac430ac7 +7c3568384caf36adccc0b4c083fa19dc61f5a35f9f51adef83a1e4410507 +9f1238fe26633516e27aa116a1ed20889fc23c2e803a34d17ca4a328b654 +df8bf4312ed207b24abe6b205f401b2239a29154f251a6ef7a5a8481640c +c92819cd1aec2d6cec4964d9230d8011a9908efe0a14f825cf3bfbe84d7f +bbfb539c127c84611cb20e0a59301a13b4a5d279c763a2f7a718f99073ae +5f18d7c7e8c9d8f4baa8ef33941cf41620bab2ebf6b55d781ec3b2bf7157 +74e3ec25418d93decaf162f96cdf0d6f96e81997358c0e1cab62af3bcb24 +86904a0858a07eabd803e5379b03c650af98500509eadef2b1afcc03dc34 +e669c1b996554c6ef76b1a40f130d9d342411fb9b5ce422e71166545e4c6 +70a2abdaf7a4fd819d3ea3c501917eca68803f09af97fc95618a36048ad9 +93647725ffd4bbc4fbbda3258b92047db2c9309e51efc433257e23c84274 +90d257dfb2ce98ad682743094f1ea6342930f3b9dcda8ce2d665e08f7aa3 +fa4df153a7da21f64c2eeb74351ae8cea832987cf187ad483d67900000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA59o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F4 0 /0 F /TTA59o00 mF +/F4SA7 F4 [167 0 0 -167 0 0 ] mFS +F4SA7 Ji +4365 1376 M <0102030405060708>[101 57 92 56 102 74 65 0]xS +25200 VM? +11 dict begin +/FontName /TTA5Ao00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb22066ef7ec7adad4e5d3 +8b2e433d08a0dc640353a02ece412a4b09d5e6d3465f6bc5e74216dd072f +3e9e3f8ddd853f280cb37ec60c99e5ebfc757e7be973819b39ff8196497e +472a63fdfc05e286e46365bf4d55ef237a062467084640c98e5d0dbea864 +ebd8683f644b0d7c6923a28af309cb98a3be6e046ced7cb900f4631b119b +65be6103be27edf87e4f495d1753cd8bd59e99bbebd2e1d600fe9e2d5ae7 +db029e32176da132e72f490d02728cdfd28b8be9472520c524363b527f9d +91b3224e223789c3aa5422aaade5dd21796ca05e253143fddcea8d000ef4 +bbfa338c920b5c025a3475b44b9ebf0dec8b8bc9fd1a4f4328f1dcfc041b +902792f9477fda833b0962748e3261db32d775f63eca2c99bd863edb9c3a +e5e06bc0886cb9de7e91161055143943d5b9ffe3d69894eff59942c6e6bd +14f1764dff5ac5f1b0bb60812e6ef1f4935a5443092a15cf32a4b18e21e9 +aa333e356f31f450f888aa11c25480a796202faf03196243a7fa68bac329 +1dbb3b0d7ad4c7f80f66f8462e44d066c558c16e377fe342997ea31c3c00 +c0903389a580aa761d9ae539521a4cc09f2cb49232385ffcc7126415f498 +5289dd79d836c4d11ac344119b7755cb406f12c2bc0c6abd598754be166c +9e62e0c1f0c55e8e205273db43574b4ce35677439575aa7cce8b1860f212 +3803d6a99b5f928e00536bdb35d7f77b9caac62936e902762921648e9189 +4586de6c61e572732b0d097683bdf4e2f7a0b9332efd48b15de3d934c324 +6d96fd969ba4abcef9b28563b45c266aeac1782cfe4ef1d3baac42796450 +3e0ecef9b80d20a51c757eb8eb8b4cb3832f1bdaf75d336748a3bf5746b5 +48d93f3a13fbd0e29d974ad5991ef5e14ee409d385d59d83fb9413950468 +ea2b09a608b72a0b7bd60ecb9814cce7d920b22d387e867a23cebcf54958 +ac985c6433b3a65b5778543daea52a9beae38bc838995895bb2262772b07 +7a4e0cdb87633287eb320b56d652895b12f39927dd54104579c497fd1c47 +25bc223e54ce3fcaa22faca351346c4979209419ec33264b1578034461b9 +d2b2359f310d3bb0578f30e5b729009d6372fcb1d6430e282de232363d67 +5eac59c4a6704836aa6e274473d2f6220a627c9ab5747fc3115ac948180f +549b305bcc2895ca1de60aea55332b2b180b36831ab380b7c2f421ca5689 +7b173ac0ceb1e4198cb47b8c626057eb4319bb9b2505f3a6c9f4638f14e3 +f07c1d915d490174d7b6deccda599a3aa67af1adb52192c2b0591f52ae78 +78527f69baf10ad6bea8d1d50898e4f5795717bcc90cd5f9078caeea6760 +ff12a1ca76439be0385cdc3c7af7905a904828638c51121648265d99c5b0 +16781fd791060dcfe4a611b15e5c42e92c1a31fd40f8873c79b438041899 +50070799a04d114ac98dbadf46a8023a4413aad03c2546cda40fdff6afd3 +70572d90a7709336daa37491ef98c376a836250a37818621b0ab50401e5c +137004bda09e99ab2726dea1b4b17afc11a04c20cbb9e12f70bc3cfe4304 +83bba0e3079cdc0a27ebffd6701cb4908f0e2afc384d7a9ef77170216a6c +acfb8842c9c700734705a3828d0f43b2bc2d378b16678b9daa7e20a62217 +5e41ce1d9a669d4a4accf73231cb66c4671642c6bc2a5cfeb84e58d51344 +3e4ee31aa83dad85b034293d42f390cb9f6949729a019ef973fd4d2a5bde +aa3b3d2d41de3daf5b11c02eca9ae7441215e0c44319c090873208fa32f3 +caf24b4b92d67e744e8234207efaf0cd03066ec4d84ac8e0f71138fa5ecf +d4a87a60a2b5be428d95e0fe40147782a1cb875c53e84ba042387a35a687 +e9e02f0a7a934069d2dc97971f43b809d0a358a5a92991cc279b4d0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA5Ao00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F5 0 /0 F /TTA5Ao00 mF +/F5SAF F5 [175 0 0 -175 0 0 ] mFS +F5SAF Ji +4350 1576 M <0102030405060708>[107 58 97 59 107 77 69 0]xS +25200 VM? +11 dict begin +/FontName /TTA5Bo00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb22066baeb5dbea4fa9a3 +71fbf5607f4335673d842c1fb7de714eadcb044948b7458d4cd4d22f303c +51e1270d84994826f6a1a17ea11bc730d40426ace8a29926f3e4fc00e701 +a90ee9f5cc95cf95beb409d15d258fa32a3a904d0f959273e6eda6f0df7d +08ac5dc01d384b162e5ca1aa8a3b1f45c0ed44717a8b1d92a54ad496aa6d +86c578d27a9aa506dcbe25e7181a98e99c355dd06cac8f9f8c2edc1a6278 +1b861b29d71b1ead02638aa086f77942c6cae5fa9678321e48be7a95b860 +56566e58dacbfcaa51dcc09cb1f7c4cc3f34dcbd2f5e33dfe4222fd8b18c +36bf74b5d48df7344cd4cf4972bc08ffa6f62ca6bc4b0eee26ece563b33f +5ca6f0c377d134cd7f31c4802763cdd756c01b5ec85fb2a1a641d7aee478 +26402f527ffe707d36f6f6f90c180dd922dcef1c5cc10cd1d26c916f8362 +190f7100cd97d6feca5604bc997f8cd99b7c0b44a5c4660d832949eaa19b +bf9aa919275db8306def142a4cbdf5689c190b4b9e9d510a319270245dc2 +16e5f52217d490e714fed8e83d29d12c55f7f01e2ad235fd852f2ea19ddf +ebc7ac1d32552815089539f04b30e775082de5a863ff0365f5607b7bfac8 +2887ef522be1490075f821f4d5ef5ece2687458ac2e87c1d503fbf3795b9 +47ae1ba5d480635a873473d7551abebec664e312e7b242f60c471eeb4e88 +b86d6d27d6d71a55196e112a1bad2d00f428d7258ecf7541a70894b2c812 +db5b402a617cb11d25510f8ed3109a74271835139e732abe651d81c5cfa3 +52703ee63da6b2dcf5929a3724c661f23e316c04cd73a3a2072f56390b79 +a7500ce8575d6fdd9221b5347ec45bb7759729a220a37b6144b41fdd5b3f +12d49a9caf57421edada1a5752f216108d2c32e40f5cab75fae02f7f3b27 +2834e35707f4788f3c70190d486b5b5baa19ad85e3f694abed01aeab1f05 +2a7b0b54b2531eb9cb1ef43e53eeb0f5969812ca7fec824a63bd8fbfc78f +46adcf490959cdaa80dafecbc397b558f027a97de9c3fb9b55ed5fde50ae +324323479715e14a95a4c955116c967c7bda2119923fb71f1f1021a74f1d +69d17e1ab09ec97586d63f267583c43b22d528f2b57c25c53e4e0b07bf8e +25bbbf3477821da145bd30c01373afff39e2baef768e0425857900d83ee1 +dd635c2f317258a2fab349a733300a24ada26a77464995e7e0bf2c24de2f +cd756fba3610d79b0f69be5682362fdb0dd6d159b27578deeea4b892db05 +55f50cfc5390f24fc67ddd9035f72675329677af64cff7b051a1a34288a4 +9ce551925ab6ec27b552fc677d566a2f18c75ad8002b2ffa6b0ec56d20fb +8f27087eb5ba673deedbb7f3e588c740f85682d3ea2ab618978f7037f659 +7da162957e953a97236acbbd757ac4b73bd8e60d34d178102477c0574175 +28662b96fbecd33dd786db3773f3771459fd92b1e25a149601d8fdbd7a6c +f1de6aa1a61da61494f8c7a8f8df88b09c72a9d70a51ef10704a324e8756 +5fecf5c04e72193933506c7a0b3d55a6d59e2c6a4ec96ec0070deeaf6abb +50f0d29fa90b9523fe30374b73444bf11dfa093827100f92fa75909a7fa1 +107d966ea3f4ce988cd246845975e87332e5e277e693f0588f2ca55c1e06 +8b1a6b5e2914a40743a964c92356393c742272e9eec81ea0fd77d8ddf90d +2a48f011233c6b0d65a1398bc12459cfc161bc15c22ff325a0aa41b29d3a +0c652a52b449502683b5a11c5a5072af5aab99ca2e7b5be106b03f066826 +5b2bd317ea19358bb92fdad766daad1cf9cbc8c81d33da27c41b0be7c252 +378efa2dd77d639f6eeab6e738ed470c5a9c2ff96956aab708cf0129f182 +19a5599cef850ffd465071e2d44b2347d401f82fade624e4dee38b0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA5Bo00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F6 0 /0 F /TTA5Bo00 mF +/F6SB7 F6 [183 0 0 -183 0 0 ] mFS +F6SB7 Ji +4336 1785 M <0102030405060708>[112 62 101 61 113 80 71 0]xS +25200 VM? +11 dict begin +/FontName /TTA5Co00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb220616fc35b8e91f4411 +2ea3e18d75348a1b570035ada3ca7681f0d5845dd9dfec3cd6f29f9d0c50 +ad262fb16bc30f7723e63f783c20889eb90751dc023bfb4ede4165eb655b +6163541eb0a9d146f382dfcad00d5398d12bb905725708a55921dbcfafc8 +fffddc36649a4d606ea08acc886b1ec07e6d5790eb9723c3b8c8bd327929 +5acebb70c048f1bb55874dd9bbc0815f7617c4031ef813c968dfb3b69a59 +12039471551dfc475d116d9f62ab9713c351ff48ffa5a9b6c0602990b34a +985e118ccf9b853ec6313649c6ddf17b10ef6ca51360a0c19710daa58695 +4c14858082820bb3985a8117932627679a0ff497e1724d5b0f0994bca28c +3d9b57615a601a25cfb1496187e3697596c87670600397a0b03d87cfe888 +e5ae783f0ac78a0198392285b47056cd96dad15fa8a95954b0d04fb1cc64 +c39402320e2f365dd118708e1c8f9c0019f4ca95d3a33bbc5fc700cb2806 +02b2b4de764f0a55eebed1277f9b5c71caf3f119ca24285d2f736386aa92 +a2ca367d9a6b3201f578278a52ad274c4478fea87dc93b97df73cdcc7a2b +b55205f2c859608e06cb37bdf8f2be8e75cf505eb0e77781e321de98f410 +bfb42b5fa970a743ecf7ac2a3d8e49c32db746f11b0c52f823e249843257 +48412382bef94b64cddc4841d3c8214a8e56aec81c12e9d5f456d1641c36 +c477ffc722b09b1b8fa301f977ba6abc218f2fbd39419917d82bdcc1a5bc +4f781865006f56faab8321f0e3c9b4e358a871dde55e36c46a402005856f +4f83816a420730bd83e5d894fad1879bf93f10325a8830777decaa17d3aa +1493a38cc7684235778bdbdb719f1297b854156d101885b96e98b7222c1b +fc11cfc18c25b03a173b05d53c5f4385aab31a2864f702402ad84ca18eed +c09937a2b31097d8b07ae55b8d1038a7ce9b3c70b6fc88db42d0bda799fa +fd17d6868c14ac40abd445c91f03b5b3a13367024e0edd28408aeb40e05e +732a268432a78cc7095b6807fb6d97562db7fb82b53277cc12062b50b480 +33ed74b2b39e9f35727a6cb20a7b35c92be650a1bc35252c7761aa55c6c8 +8442073108bcdb015fa7d8fabc5ea6ff2bd0c372403feb12da4ef9adf970 +6efc84b2a0b531345ae34d9d3699feb3675889d6ed757255a911d766f0a4 +dd34c57301bbe1265e3883c7697ff7116c5a9cff89e8bf96cb16513a1e86 +f6b1239f76daddfa3ed680db35a2881d3fa08b9ba64f09d1971958ce62ee +de4a1c4f9e69ee0674dbe1ec200a7d1d76c52ad7f5025d5f812273f18ff8 +6af9f5fa5bff055c25c590e50fe8eddb3feb6ccd8e0d9fd0ac0916658f5c +0a618bf4cfdaf2d1451f29869de7771b66a4909f7139825334d97db11f15 +a9359cc2d5012c57fc9122b248da66fcd042370313d1729e9ae288203470 +1b92f8e155c72aa48e38f01dd3651f516effdfc5bb75d612072f7d02aafc +86b606522e2a5f952f9c62762b208b30be4b59130b141db083f35a9d315a +0578a98ed4d0ecb7c5bbb7ea94d5f66568e12c754a1d91c199c8ccb95299 +c4bc3e6e2e3ffd9384e9bc392900389dda064e849fedb5d38bdddfafd0fc +7ebaead7941293d3f85ab533a79fcc2286dce859b663142ce0b16a99750b +e0a02cca5a6e4cd7e0d46fd1fac9c833bbbf33d307c3741f54ab210bb4e2 +ba0077d05abcdc9334e07f77dff7cf6515f2418dc5a93043d4777ac91af8 +f4cf77a24e14042d3046797038b4fbfd7d430563657ac56608c6f98b3769 +2b75a71bdc4781c16bf3f738a1d3ffbd5ae9e99f3c691ea52f311236b669 +d7d0689268d10d2d90ca9d06b88097b2d72ea20c75109f87768b2d489e67 +2330db7f78701b56cfa5e5b02eb6375b2df4e612630504bff664125a0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA5Co00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F7 0 /0 F /TTA5Co00 mF +/F7SC8 F7 [200 0 0 -200 0 0 ] mFS +F7SC8 Ji +4306 2012 M <0102030405060708>[122 67 111 67 122 89 77 0]xS +25200 VM? +11 dict begin +/FontName /TTA5Do00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb22066cadc506161c23a7 +07cdaf743386c9822f1c3d4f1494deef8094aecfa106d5bdcefc2934aeea +6c4639fba0af1e13157a96336c8af33c57c65e0fcefc246506268822e518 +cddff1357a1dac1553af2b7cc7c807b2848594a4ec5eb543f2401ec4a3aa +5c3198e4b670c8cdbca93390ddfde52b91b320ee408da449cdbbe4b8a5a6 +9160a65140185ee849eac0bbedbac799f4d0a8bcbb61f53c0a60fa06e396 +e2db21c286f13dee961e86c199cb40f7b489412d0e75822c3ebe0db17eed +df59427be23998af0d97ec9f6e15cf937e9aeeeebc5ac671d2ae3d35819b +1d21b24d78783e94bd21c2e3f61c52b62d334162bb9a14504c229f656c89 +872fe3863d2e9b6ab97a470713023e22e8f9517cc057c317547c546577c2 +9a4a39657b10568ba08dd8579b011d4bf5ab42a847852edc43d265df501f +05326c3804b1fad0ffa31e7629b54edce59163ad88f88804675e68747d16 +6286211a0f76666185aec30ca45784112a93bcf0ed930a554114ea2958dc +be58bb93a657e161193a0114f2d16b2ac7418cbecdddd7b9afc10673c246 +c814cfbbc49e88044ac141baad415809ee06676d000c2c7ac663be935b1f +04bdf1e27fe903d292f49ed28429a6a8750e734895bd4e681f33f7e0e615 +78282e452fdefdcbd93b89248f3172b927b1563a4b580f303f294847beba +b5b8ab0693692817badaa8d4ba9bd3a17c5b0db7f8c36f52f388261cd797 +54b5bb730849e083e1cbc9a0c7c4597bc0dad77a79d35fc6f4e0ea162d68 +4fe21b3223dfa8df1137cb37a8bad1f221f869428f779bafa584bce859a3 +646ab50caa39997b3fc3ebedef9109e7b32efd180b3633b5cc562cdd7ee9 +68789ac1dc8a27261c09aaf09f69c61ee63c380913bf4baf6944d8166a5b +54b8ffdf78fe6875854d17898d53f0fddfe5f913e41f9657452f7c93805a +ecc771b74975813179e3a181d2f7268c6adfb1c923067e737fca7bd5c060 +c67755410ec3faf0265d0483f5c66a31bdb89ae87239d3bd8bd49b4be079 +2565bd4da3eeacab81135a4fe96733e47faec3fc5c1165e25a5f5c19e24e +589a1ba2cb960ab30bf2cbf442b12c3a75d752b8cc667aeb891f34329e41 +e6a35cd058c9a5d8d78a6bd7e9687606108239def2530636fa2a02d3091d +8abd4583482272bf522b3ed2eb217f1c209621fd8eab075683819b077977 +ddc380731182d2d34bffc8f253ba4cdec4c054bc489682c39287cb8e3ebb +1c49c50617994d8169ce00e67f617d5ebf7a7c5390a3096424bb3854294d +a66805215beb03aa892ba9019872ac2c3cdd408b7a3f4d9ad3af3cdaa284 +bba725d0d16636c723507f53258a97d77cc8f9dae0eaf1dcb7a6f58c0bce +5339f3cf6c1e85164624363e4b267f471170d417d307080d11dded682cce +378cbcf8fb1f98a78960b4a37c917346fe6da893d512ad58b1f33ec6ee88 +201aadcf068877609c68922e6eaf21524367ed9cb711f1b4d225ba8c6302 +dcd23f934979a2cdf99e5f99fa661adc0117169415a20660498de8046bde +1bf97171d5a06cf380771f4b0356847bf466fbc7ae3998fc87ccfb05e624 +1179a30746391da63a4e2a19a38680c7a5e276ca15712c7eb2afe8430882 +eabd46f019c882f82fbbd86195810899a0c676b9f322309d945cf5010cb5 +bbce1a15392d78c20880a4edf30404c1005656b0bd33dc31b1624ade0b5e +ebc291cbed766f163e47554522396d59734bc0bdc46f207b9e9b62b94a14 +8039b5a3ed8720863aa1d0774c2738767018cc6469e35aa9f2ae6409842a +8d18ecc86eb37249e60b6056542f605e123c1276e606b6ca246111b2b5ab +1ee684f1c915e1b2a8b783e7138f7bbc48542315461ddf686d17970000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA5Do00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F8 0 /0 F /TTA5Do00 mF +/F8SD9 F8 [217 0 0 -217 0 0 ] mFS +F8SD9 Ji +4277 2258 M <0102030405060708>[133 71 121 73 132 96 84 0]xS +25200 VM? +11 dict begin +/FontName /TTA5Eo00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb2206689a2c7f31f86d83 +ec215dc15546bab381b4f0b8cf598b3de4c3de3f6a106e539cdb0f64c685 +e8ce98b2286105e954732793d04f8c77bb313fbaa17485daeba6e5c4f6f5 +d01696085413cf6d9ad5a061c2eeb124bbb8b99bc879c0521034f10efed3 +37a6d5850e031ec2caee80822c71fef24a88e5787fe50f5de916d2d6a3a2 +e380f8898b9210c3a198ca0f76bbedf8fded493125b69a924475869668fc +861cfc389477f13d02bb3d0d067c2e164b56613d248570c4482ef87c54ef +4d4d50dee5f62984f8581aa288b09bf7e231e844c7f50e25f78f7e6ed700 +18dc53b8a138090dc053e18ddfbff6cd6d885a3703a59e298001310379f9 +be660008ea82c80f1447f0a7945d0745faad0b0830ff465a65c587c5e996 +95495f5911387ba8aca425ea35b80e043de79bce76252042b0cde47cf891 +4efa923553835ff41a7b627bf6123dc1f6206fb88246c428e4983733f82c +fcb24f89ed1b6607ec6726f43950e1a20ae46bc4181f0abe0ea39caf020a +6119f6355ecb87c1b45b72b4af80d27a3801a6e1fb792c77fe9db23d751a +0c0c62f748e06896b179fdcbbfb2a8ee05fb52f687f43a5c018505f0649b +5f257546b1037a8de164aef8fa06294cd4f6e058aa2f040c3cc1e6440341 +4fd43acafd408d15070730b8d5a49a1f524d57a23730fd79727c21e905f5 +a653c7bedeeeaeba7382fb9cc6b703f29f89ac4da5f8721c0752c884473e +c3f30e16b7eda908f68fc34f96f25faa76585ac41846682c52e2ff9f40d3 +3a61fddd2ec477641be661f5bc7e51018abde3e7f3dca6c64425c9025bbf +7577dc758aaeb5e3aeddc592c365d50985ed3d387f80c73b28185997ae1b +2e1a77b025b36f91df6ad12be854fe79727317fcc10fcff99549233530bc +22beaca0960ba7e2c092be4e9af0f630b6e7f22fd0d30c1f21cec9418066 +eb5e81abbdcfe85696bfec4cc7746886880c04eb0b333a42fc1f077dd7cf +7d4d808e690a15cfea75a4998c592c52967a33da837ae0569142330069fe +babc011d29826fcdd1d64a2cf3112b20d98aa16e1b4d1574bd8e124bd7f0 +169c402f37a7cfc53921608cdecfd58447b3b98447edcbf69e5c5ddd2c8d +cd73f297c5901858a9552c530528872bbaf2dd6215fe304cb767529af72c +67b145b0ac5b1308c855a307bd78548fcfcaa6eef3057280ae00a90e0dd6 +fe6c0b5d68783be52dac797c2cb6e7243331d7e9ebab2beb54d02a87571a +43fda71b3e15f97b5c965bbce78ec8e6efff04ca44fe2c4aaee2d981f02d +af6c1a696b6c86fd2b8ebfbe5b3dc92813be6ce95a41134640e27643a851 +55ca711bad0cb9a26482e5a8f6ca3b067e43ad332c21c148b0ed92d55bae +9ef93397577adc025f36f6ae10d59caf488ee9b6d6bbe3c55b6447c7cb7a +d26e7ebdb2992907b685a7e703d3024baa3b0787e89de76fea8b46d2b473 +d6733b40d4e41923d6b923b190103fdabcedd8e701ccb843a760aeea1096 +212590c5a281a108951ea4cdbc2e6c7114724b5c1021d593605618a4d7fa +df5bf17a2e5f267bb62ae421b46d3edb9f8856438664637da5bfc861128f +c5639ea03dc7290c690436bce7820156c0be99100274f97054877a573ddc +9c0be5dfd7cef8f7c8aba68ac05b9ce1b81180c001bd7841349c9587ba21 +d9b158599b672a7c42238e7eef628da1a88b539886a6b9f6c241a53ff44c +adadc01d0ef7469509c740afb7fee4eb2a75ef8e78072229b90cd292fa96 +6f94bf659328d23cc7f22253a06cd3b0d2db36646f58084a622904a66fe7 +9b6260f400bac49be0e74934869dca984af60e898905b07ce5e37e729c0e +5806c2b93ef7a09edbaaec50e5e49e7f9673a9f463df5eb51feb0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA5Eo00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F9 0 /0 F /TTA5Eo00 mF +/F9SE9 F9 [233 0 0 -233 0 0 ] mFS +F9SE9 Ji +4247 2523 M <0102030405060708>[142 78 129 79 141 104 90 0]xS +25200 VM? +11 dict begin +/FontName /TTA5Fo00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb22061485d7d0c2a6275d +8da901d4c90b764c07b7b55a308444fa1e7a528df157b5f3a3c98718c51b +b8405ef3fea9ef7db06034e263d395c70f718a4b588bc1590b987df93e7a +72c230091e534b07a2ee7b4cf1641847bfc6d3721c80ad7d67f7b7e7952f +5297e4c939a240bef9367734ebdb25f95d2e914d53ed710482d6c0ef0e7e +a5d569ebc4ead0daec244491f71d5c6c5279d1c62599dfcd2e5b8f1a98c0 +883cd198bd7c7cb5d8583f6eb5bdadc1509f1e07e8a60fdd5ac1f91fa8bc +bd3db3de11f798d327c54f9bab256e9b64ee974c431c601574ba9f16f705 +f849859f9b81fe926d3ad64dc715c4fcdd03547669c72c29ff6d9db7ba0c +9c8eb6ad87836223789881c8c054a785683e679ff620f747733cf8a65f41 +f41804649ac29633168ee70c441958e03b3d857aef37fe2f4b61a4356640 +8d39bf06df627a1cafbec8c90cd5d4b9e17ddbc0ef8b838887991521beec +7745da33772b5f1dfee80a89ef3058868878ef1abe7131a1a337abf0c241 +12546185d043c9a89bc0790368cab51d11bde95d9f893797a1bf7da358eb +b681c63b922a074a5be052b91f0bfc31090ca4d6f266f70f4f4c27ff2774 +475b69301570f64e2a775e961246ba51d1ef37716621dce50b155078fb60 +cd81d9c133641423778e3f899bb102dfc5f28f20894bf5850e57425324a5 +7adf1ee9ed235f80dd53251e24d53992b184dea9bd5644be6d3c7128f61b +469e5b03866cf5d090fb847d437ca106ceeffd41a20c2feb6f018fe69b81 +d2e1bf7a084a6c95ea8f102ad81b5e02812d7c36395f11ceb3fac49adfe3 +f918e5bcefe4b1425c469dd7e3c57de7a680d6999078510cdf1a2741efaa +af2995071314fb018448d7dcb5109391cbc69507d206d6eaf1cf74b28403 +00aaf32adeddf5070b80f9831083be56864cb84d7c80f60df6d1f534dd88 +90245a330c13b34b0b487f7c126489e4faebade7b1d12ffc058bbf48baff +67fb0722a453db48756058436e565969dec48ad212ff410e07d51fa23d54 +f180e530efae113004f42d300251c04eda6317f01db9cc54808622ddb708 +2e4238aed2e5aabad836d08a599bb57a43faef2e1f3e4cabedd2dec9843c +2eec92fafe755341b5c2b0aa3fa058da19b178a041ac3cdf161f1df3c506 +110fdd73c18af469090aefad97f6732e4478506a901883d1809359513d7c +bb2aff861ff164e85a79fa1fae05fbcd6c4b3248c4d7d9dcf3ff4ea043b0 +9e9a8b73f108ec6873d7de2af19598798a1e2948797270ca9d680070b2c4 +cff9e32bf2417a6813098943ff603482c834a38ba8d10b16a26e195b41f1 +66dc801fe2ff73ad06165e3c48281bba7c5ac6c6c09774362af43726f85c +ac8fad3dccff8c7008a3bf70265abe55a724af89b740b3b8f464ad66db80 +06ff96f44b70a5630729600bf74ff96218dd3865fd472776f0cc56bc02f2 +62f60450c4041afbe70d278e7fe87b4956c3a414c9efc1ef733bf317f984 +644729023b633fee715f438df1b36d5f021bb0c018b838570c1ab4a47378 +6cf297596d0831c0ecef9dadb1ce6f90210c8498ddce915d60d9d0ddf317 +0415d5788b83c3883ff9968c9875b2f8f9be67d847b07a4143605e9cdd26 +f84486d0d8014ce92ecfb99bb11ccfc40efe0019383cf75e02f132b9c552 +6da2286619ef4904b9537885b4fc108a295fc33213cfbead8cf919c20b7a +42e5d1e389899e132428f143d5ad323c4890fd80deea0e1133dd64149eda +5ac5c123e24807ecc7ec529e5b5fe77fcf4d199f4ac1f2c37fa1f70e36f5 +a52faf5e28918a4dec9abceb374a2167601194c2b5b44beeb01e3203a82a +0378af4be9359d36b99521b6b93da7a297b1dc05c54edaa035b5b10000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA5Fo00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F10 0 /0 F /TTA5Fo00 mF +/F10SFA F10 [250 0 0 -250 0 0 ] mFS +F10SFA Ji +4218 2806 M <0102030405060708>[153 83 139 83 153 111 97 0]xS +25200 VM? +11 dict begin +/FontName /TTA60o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb220669f64824a95af9e1 +b7462e8101f23040cd414ad1ad5fc3ea20cd2b3e75f6ba5e360e7705bc89 +b2e3bf9d3e15ae90366dd842e27734d8f0e0c27a6a076b2c59fadff0ec12 +8400f2a8d05c969a3b3817ad9f981ccf8ee6cca8c5236ec32d047c5cb595 +b4e3e2bcdb983d7b14810f4c5567975b7decfa08dcb923d4ef76014e6ece +7119e297986961f7aba4ad98225ea6c1ed25b02f4a2f325595b8cddd4d10 +085bce5d2dbf77aa0a40181d2bcafae4abe0b0128ec44e173da86ed26fd2 +b266135f3566bab3a73a2358120237add2d0efb4b62380f68a275d6ea766 +2305076aabafd83c161527b9200a8c64465680e8d626f3c9662f5aa9927d +69882070a476dd23399cbdf49c8f6da83cb53ffbc2ab9189fb529a614652 +75d93d4a2af2a4bd529a88a496b70b6abc1a72d91cf0087faf95bb6a9b12 +a1d3f5c69427ec3b5117326196458bebc4a07bf2ac9228381defb84d565a +104d1a6587062d03ac3c58f6ddbe8979cfa3de980a675af65c303b63e181 +a015445a27b3cb04b1635773e8f0c3b6c95b8a844b69db30b74ee4b6f1d3 +8c9439aa9754161e65b5d4ce67f0809e34167542666410a3f9c56253809a +8dec6dbcabf721c0d5ca6261144924a302842e973846e6f6f50494bbf814 +4049c7cfac9be4774d06653114914308033c25e328af5a4ab42541699492 +fdc3cb7a1c287c3b623230b9f083ec48e34f2857a7bffd03e90700183d0b +0f8310b4ada2d2064bae1b46c72cfe83ad9e0e818d1d0f3baf70c228817b +9ec38a785de8d17ba5093765b4bf6c22d6ba40a9f9d80eadad352b33befa +92a99829ff3f7d917dff22e221617c80860b8057a91ca0397ec4147f73d7 +7713b73da270437a982c2db0a0a45ea60d7108c3ee6c998c56999226149e +dc27ff93a4562b508c2b2d36b7504f4ccfa9f27c57aba776456575e451d9 +510ba43a472fe0cf34cbca5b5d83b4976d9390b7fc6dabf21c227f4963c2 +24f01d8f5ce06ed8e31b293a57a762c62db3ae155710d0c792a78014ab1f +b0d4ba14f48fc5c0150aab1cd18e90e4a1b826a36d25a13d61a73e353db2 +ab6c52f562b648f98112997686d7f9cc9b091e8780e3bfe7695bb967d0c5 +9924aea5d79734572c3568f27a4b53722882803cccb3eb6bf8e71374963a +3a89239361796eb6432d4dc63601f05b78a250ce6ec031c412c56d5e243a +7ed5cfb66b44c571d5ecc8b5be209ae1a00acfcb08d949bbc5c382e3de92 +eef300faa0b505282e9b58e82301f42dc79752c3673cdeac3996534c25a9 +56ac8bcaabcd5982f6cad6b059332ab3b7dfeb8e74c4a6fcf11f9f7595e8 +6be17bbfeb1d1f4e1552f684259ef3bf25443dc82c98a4e5670a9da1bc38 +1daa61f7e58e768fb26ac57cf76c1854ab05917d6e3f366d241a3118c31a +b39e31597d4f8b4591a5725ec081d83ad3c9229db25a508a9fbc5030fecf +4b86a246d210caf9969a2cf191db0d4ba5944d0dec317f71a58bc7654817 +e703e9af9eb4e6941db44b1344e631067ac9301a3b5639ca77329a8a733d +e53350ebbaa58635ccb16892e56162a564e59ba132f921477e1bb7f5b84f +6d9a131024895857a972d3dd125fa7ab1492486dbb3c219b989cdf51f557 +c15999460b08993c599587689f6af0650574123a6d97e293acf6f48b3f84 +2a159a71bebc068ff5a5c890ab433080e70a734d75f2b1a3c4c110f871cf +8a1a31b8491a83841e02734057361ef04c844da7cb24ab011ccfdfc7e8c0 +5afc3cc8e268965810b6d6a441e2076da2f739651cae11715fc8409f735b +c4c553c2d12cb4744a448d135031effd4b5b0611810744e162e8b81d512c +63faf3d2c4c02803cfc42511419ed72b575a70ff89e1e8cdc387ff0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA60o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F11 0 /0 F /TTA60o00 mF +/F11S10B F11 [267 0 0 -267 0 0 ] mFS +F11S10B Ji +4188 3109 M <0102030405060708>[163 89 148 89 162 119 103 0]xS +25200 VM? +11 dict begin +/FontName /TTA61o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb22066a6b46d2cf1e31c8 +8c173203a6107d2397cabd68bbc408288f57dcdcf1ba25462a21c2a280fd +4872197251257cb1b5a68147f0eab49c590d0fc4f101316f75d4d0196e5a +ac34d7d2e9511628ac0fd24e6ff645e5c987e3cd80b41ff91b50316539f1 +945b229cc2b0fd7a67a73172bf84134051c7dbf945bf36c21b55175b1c6b +b36f0672f5737fffba364f88ea1255b73fa8ee6092bff85991d33cdca1a4 +a4cc23e5faf71e692c5041decff1e6b04eae13e98ece29596770a98c895b +225dec5dd89035c2f378a13bab71727eefbdc0cbca7c5ef8cb35ce7c1e21 +a20987e02b1872227ac2149890a99f33e4c14ffa2a0f7f6af0b4d8d559b7 +7d52407f6fb4707a7902fb4d0930e09b142a87df214434e7c49a95b20a64 +91cdd7994b2d38bd136500f36657f6ecc27d53eaec93089e292291d9296b +891d30464a04dee7e4c852933e00e3309305809538c0c3b9a9edd7626aaf +6ca17228f379260e938512ceda67808ce4982b30312c8c2473d4a1727cc2 +742d35ab6730e4a615192f13708fd9c9e9fb65aa18e78a1698d1390dd1b4 +8d828d743ccaaaba22181d326cae273cfea381ae1305943dcd8fccac4d04 +f7a53d9dc5f61d9c6b34f33c79abceb357e6540cbe4b49b0cfce43f93f59 +8f0efa3ab63f515cefec093c13ec8df9b98f4502475bd4859ae19d8a2a2e +1ff887cfd300ad50dc620ba7996ab2d06a330c6004fedb3d71958efa0451 +176c4b1e3afcb48c6560f0e4fe8a302c7bbbd2fe83a4bb54a114a1883058 +48dc2965f310a9d6f4ee9ac19a486b987fdd9ff596013b708e29af08ebc0 +44dc8fa57633da7ec675fa00a692161401fa16244c96460f74549e8daebb +940f454dfc96316f14ebd9fb9c1d86e487175c282f8c5b3008e378695789 +fee70e0ba828400cc3fd62f10bba3e50ae17105c7189ce026e907621fd87 +07a4cd89b4516b5af98a1addbef0ee4bfccd1f306835b2fbe716187f3570 +5ebfb0e16f98cd24a78c82434903f09e5b0e78c02a43d38bbe6f221dc88b +adf8efdb08e0ebe4608d4f4392d4d9ecfda871039e0049f0881bbd5722d9 +3d3f784c628ee9910cf824854095a75255953ac6376e83dd085b6741d35f +604b09473df889906ecfd22a9bc759cdc9d1ee7abfc75213b1d495e4663d +4e722b58de4d50671c19cbc3a4dbd20ed5e0c6567ad69a0c5203a619ff58 +ee3ed1a9d77f10d64a36ba6f89a629f9ffa2a4f1fd2bf2affb4204d5437b +540625d7daa43bb790183fbf524d914ac18817aeb295da7b40b97d3d4b89 +54977054e0ddb9e00c4679651b905db04b1bbcb4017e4a666154f3c2ac92 +5db40a171cec499af9da1858234e5e15c4c6590c5b2eb366c9d11b3ff86a +937e896a0b8d42e1aef576893360709ff76bbb3baa4bee49dbf2f56b84e9 +d2ff6ab36add7128d2864d0958598d86c99eaa799662120463dcfe373e94 +c803657a95a5aa31d66e4631f1a09f9a47bd8b287975a71b42900bd8699b +9730e1bf655c0f68dea05dad22d99852e444d801a2ff17de73e9ad49a996 +c6b23cce82b661b50776d1be87cf5e16c7c88302824f56dd9eb5ece935f4 +f9a43384878fa1d5634f727ac6a6dbadb51afedcede5e3832e91dda9b171 +399d4f7542589aa47f800feb7172c33a426b58499488facaa1a51ed5a8de +3acf21da23664db141de8dc183042b73a96ed18089c0bb4a890614cd3a2f +3c4911c131221865dec83302116d31ad9527433038ffc8d0f96f234ef5e8 +ac69c6d1f5b9aeb3f4a0bc248700ba99bf64aeb07bc7f3f368512c77aacb +5ac234f9386079b6a20d9998967044c40a948a9eb53c6ba443c39797f1b4 +c0f6d1903d61beff8fbb0ff303f0217db50d3bf6b4b8fad466d1ed0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA61o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F12 0 /0 F /TTA61o00 mF +/F12S12C F12 [300 0 0 -300 0 0 ] mFS +F12S12C Ji +4128 3447 M <0102030405060708>[183 100 167 100 183 132 117 0]xS +25200 VM? +11 dict begin +/FontName /TTA62o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb22066a6b46d2cf1e31c8 +8d680a80f464f13349e5689a189f13dd0689e85869e2bbd27eb19374eb38 +071897af922bc3f8ff6b7c3fca4ab2bbe308e84badd13a5b927c626da36b +1037fa38a19ada6ac72cbaa7ce1cb85eb111d32a1ef92b11aa069b0a273b +48c617c3358281f67bd01a76b549470528570b0c4d05b950a91475fe2981 +7a0c2bb0b286c50881f2f950fa93bf9806ec786b46525ecce59f4443e75d +5d7985890e7128177ef8e802f1813332aa8684a83067f590407c2dde2d71 +73e14b887b636aadc7fab122b657dabd4046c48129a3af1103f40a16259a +eddaf0f051e1753a1f3e3689e35deb19a06b2f3b85dbcc93ba0d60c5ff6d +68160e7e1c576a9ffa0ab3bfa64730821ccf4ea1fc95e15fc102c355d570 +338a9b5072b4ccbf1cf9392f81cc77cb641160315c4e0633ba976fd4745b +687108d2dcbc28a4223c53f842f8f3732d98ccfe0db81dc11ae752887cbf +9b3a755f12ce22a69d74d5627e1cdfe96f7b6170185a428fbecea6dde1d4 +319929e215abd940ad9817fbd2dafbfcf71a02213753bc2f771deb3397a4 +52bc2eccf72e56e569d6c9d14d3ddb28217c69a621fd8f214394d87cf834 +3f530aa72a28658956515e3a70acdda0f82ac1648b1522aa1c30473fb36f +b54a6abc080c88bef7463200bc3b84fca38f4d5e1e3fb1f8a7793a202cc4 +44b5ac108f2f5d1fc9330975186f2c35636f0eb5e5c4e8d7e20ec2407ba2 +0ab60aac449ae735447a0bd83c9f649a025f215ca3d2c0a063233d231c80 +f2d81d46c475c8eac6103d9711ce1dd986645286fe0a7d6bdd0b854799c6 +2078e169bc4bdeaf54fe41e9feab27467ea91ce80a9ea2526c0305727a5c +1f010c7bc04e3e1e2719c2c67f2beec0d90c6248f7062d3a86223dbf2f4e +6dd858ad111e2fac402858eced9ea7c78d239b791f448448cbff2b9b8fd0 +d7d373837195d94f69ef6acb0b58825d45f9494231f949f9338ea5ac1fe5 +e78a485fe2d456bcfbfc77d6875ad95413cc0b05f2fd0b1d5d87bb45adff +aa97135b0699ae511381c1092d5c9f658f33bff078fdea96425ffd5320c2 +675fc8b58b96f02b8a63c8b0031843430324f55d36c42d9e4a242afffbf3 +f5f5ef2d79584cd9961d62978d8f5b5ab9394b9ba4e9cef9befe2c720a3a +15e7a4213221320284bfa64ef6eac7907d86a6c4b4a25747ef60d73f889a +5fbeb0cfcefd06df792a9221ea8d7a63d331c8c120d95b148eff4395527a +cd9279d0cfe32ecada854c38c85dae0bd54edc6631aee3a5c563a5553fe1 +487e1b6474dc60916f5c26baf2f306695972475809fadd8178ebe0b3e6b4 +98995f5e2f34779a6bcf317ff8e18af39b8ea02426259c38610fa7d4b994 +247e4d1a70374fbfeaed6fddee1b0814535125d0501ee6d5852181262ae9 +c50e8e99460ce2a96929e426dccf8cedfbebcb7845fdac62512145a65636 +4f48c63755a860ed7f0619f80ba6d057960d0ef012c5c2e8389a89e5d32e +b8a80d3bf67ef8d84d2c2ceafaaae987ec4030146eb511ad6b2a729bc2ca +f48cc2d0534b88bca04cd2d60814a46528d0e5e02e933552f1cecb6c5b58 +8fd53c5a53f3092ade44eeb11b399f6a3b90c52fae04861e23ef6d113547 +56f5ead2292e1b05a3fb7c85d6911a556f26a22c15a58c3fa5e46886bae4 +8d0a6baf057d60f763b1901866542e20425cc12e0203575c7f133ab80ffe +5b222bb798ea64c93abdf1b85010d562e35b3f24064614df3942d90e6c83 +0ed5570bef45451e1d1c5fe32cb9efca3ac8e3a6abacc7c75c02db4ff81a +51e792507e2d45b4685f270e703d63e15e0c7dabacc30e7ac546fcbb588f +1043bf9214d0606f29b5e11013bde03b272216c8f7e0b98f8ae9da0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA62o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F13 0 /0 F /TTA62o00 mF +/F13S14D F13 [333 0 0 -333 0 0 ] mFS +F13S14D Ji +4069 3823 M <0102030405060708>[203 111 185 111 204 147 129 0]xS +25200 VM? +11 dict begin +/FontName /TTA63o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb2206158487fb3119fa92 +a8a86034818e39ec9fc196fd03660d0897479998880acfaf10dbf270706c +28fa707ce4dad00c8e93cc045f9a10f475da3df377bf5ded23dfbab06e55 +cc7d6cf560ab7dcb7eefb7cf36eb09d88933abf76e7e0394c20619811a51 +443bbfa69c436e08988379dbefa860397a3f0d85b5036475ef5b3ba59810 +143f3e33c935c2c9125c1df9354d17924ca77a47a34ec1c15611c5ac9f6b +56e9758d7af90235b8ed96875cb14e2323abefd86a36c74bc59eeac84fe0 +d013f3515cc05c7e5f694e9fbbd43f931d6afe14238301aaad0a3c19b198 +b1efec19f875db470cd5db8b58d1a9715b2e1082fcb22755ed511d03db7d +026c3e0b9897db3d94a72b9cccc5a6460baa0834eb22c9cd4a783353c578 +013ecb0f00144828def066ba832978414b051ff879bd7aa2b1e60ed7b068 +7564600d3b11ee13d514044212f44c470186e217cebcd796acbfb8f18a5a +b262054a3ae208111ea1daec5d7c42d978501a3a924f6acdcabc5c2483b6 +9a708086b1f1477f78736e10664014b5f7278c223ad56498da95a4be6335 +a2ec179f528e57e99e177cdc7ee01f27e41cd84d37adfac2dc7bdb9272a0 +7ad37ac91ea2c5b6801d3f62417e87cfad0f483e9bd45e55c4cb4911f711 +a55886fea6300530aef55669bf62569d023c1ddd2ba2d038296ba4b6234e +6a7fd36a75b2a372f98a1ed02aacaf6506c2b8deb73aff137aa589043226 +cb1929a8d09ad7dfff5312d1c5a3c5a13b48af57c294857ccdfbe5fd00fe +24562fa7040ce5c75ab6ec8362b0fc8de4e7d7e6faeb8b3fecd5928ee6b7 +95c15c7fde8a021278bd25aa236c5e7b91421aaa11710145547210fc9ea4 +5cad7bf0899e082aad912fc701a087a9bd85560095b9fa079316ae4ff508 +e33daca2e55f687982dc50603d7311a9cbe39ab38a73f5ec2b4fd3b46775 +951c0082b5f434756251fb779103b284771c9be4047024d30194d9c338ad +2b1958e7137e74fd3cf1753a68f030d1e48a99a92131937a7f494fd3bdd0 +e707409d2eec84e68de07225866f2401a10cdbf19d28ce0e2254161604a4 +4e74cf7c6279d55d39a548121129b619067b8d68db383f32a065bb526c24 +b02ef9a9c354d4def81020323ea06c93d647e6fa2f221b047a7ecc8198e3 +cc5e16865013bac7a20500895114c5d97de0c9a3726f288a42254e2204fa +14ba9d4fb8f1b4bb44841d3d70a6d754b193d701d66543798ab1d3e4dee4 +9e89b21b31f1c07a07ab948a70bde185c4101d3c9e361eb67c255f3bc5a9 +0c89f81def08d4180b0d5e8d0b212e545485fea50427de790af06413e931 +4233d87df73e012d343f71b3a4e0da09ad443e47b0bb230cb7cdeff909ca +ce2f15b2e2e1807fde167179540fd7e916b69f0d277cf0f91af017925581 +d9a1d66c86d7834f2af841ce657288cbdfcb6c0d07abdf6a0699fb8f73fb +f5d08ee287c3ce53312842e813ab4675b0d072e1d152f7758cec3abe9f68 +62252ceea015b7587db6c081fed9efae5da5380a3ecac1f0a5391245c28c +9f6d1f20fa547aea71f89fcba2d979a0215776dd62d4790f202b36db791e +ad6e7b6dce1612ca4ac3d02d4aaf9322d34ebd6c37e0bdeb11b9c82bdc97 +5ea90afe2d06ef815b2ed0581666f7e3bc9466a68d51e1bd00c8ae6bb94f +d0fe97fdc276f28d5b9c0200492cc41d53f21336bb0e660e1b2758da5452 +bf6f0638b9e50224c3073622767433c92a9ad7a79b1abcacfab68a0e70cb +5353fc54f6987b13d84d79b5d954f7b3603ff942fafc4460564d4582bbc1 +3ca21e59a5556335ecc99f3b78a254c52ed6a79ead46d6280e91a5641e67 +a85529b255e42dd69656fdef1ece30227b328d980fe6082bb624960000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA63o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F14 0 /0 F /TTA63o00 mF +/F14S16F F14 [367 0 0 -367 0 0 ] mFS +F14S16F Ji +4010 4238 M <0102030405060708>[225 121 204 122 223 164 142 0]xS +4010 4659 M <0102030405060708>[225 121 204 122 223 164 142 0]xS +25200 VM? +11 dict begin +/FontName /TTA64o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb220616fc35b8e91f4411 +23fc68c58b5f46a1f1275e177c6aa9c2eed0243cce590e527cd2227f8444 +14cf47b571f571784ce9573c21d7d38a8b1f3b5c5b80564c328122627f3f +ac24de4871f2b61b498c1035317868d10aec4be63ce71d6eb7894d350070 +e2d3bb54ff08c43ee722e479e9be36817aeb0f94485e836a5e505477047d +94ef6bb481178e2636db057ffe2bd6ba3de8544935b3d2c20e99196d9bb1 +847ed930b62c48bee95c908968e4c681545cc28f60f97ed41399a3615689 +6de5fdb9d0a5f0abd2fdb820eaad1a8f08dad1b1f440e099959ed4d516db +48ae31477b68fa2908927032ac27a55ac3cf78a5e7be83075d2065f47e20 +a3a47beb91299bf9bbae879b26794c0e5cb4e680ec7a6dd1498e36f1fbee +8a4d52c01ae62ed702f0c1f83b39a7129db168e37b5dae7b92d5622ce8a8 +91120de77d44f809ad1e6cf23ac58bcc4b46524801cee0f6fc7c68d33c86 +0d7ff13d43bc160567ebe1da324107967ed860c79364f8e8ad1ad7f0b0bf +36f35eb2d1ea1fada92cd8ca58106c9f57f5d9ec3562775df931dd704510 +02b9edb700fbe3f89ecc31417ec84400756e2a243bc34393908dcca3c0b5 +4dec679d743a79ce99a4c11236b9738f04e0cb5af2f57ca5fcc258a0a24d +60805661bfc9dcad4e514d5089a67ed3f9f73e39b2c1e8e0f9a48d7ae38a +cf0c1822d730ac58cc5ed4094b96b1d42bd7a4a1493f712a6d160a6d71df +28e64d9e168b21f188b034c1163c75b0e237fcd7fde9216848d62075c3c0 +3e332de3d9078a9adafb3667a456abb812ff43738c70ab9954d70541a0ad +823bef3acad4b39195cea348d88a6992440ae3a11e65bac8009eff46d52f +ab715920e8be65cc950b41190fc3ec3eb9710ef499cdcb28b288771a148c +2c68140fbe14229148989e5f0f57de39659865c5514eb54cf7960fb50c34 +5fe43eaf66c115e73c8c7c344c0bf8af82c6f3ec5bc2d4804a8c30bb135c +783b2b4d782235e4734c4cda9fccb033396448b2bb417d58a06168044397 +92b816cab67386e1bee2d4a4fe0f1581ab509613c5658f55e769a7eb49e3 +a89a6d57c389cb0882d32528e2545f8a48eb3838b63974e74181d68d27fb +91149cb2c362e7c1abaec89872358cd66895a6eda09a1fa84c234ab03c7e +8bf1e84996115a76012491925771a863d27c46408ffadc375419dd7a90b8 +943b79131747572117d6d98eab875f4a70036f7012be1a9fabd106401489 +e16c198b1fa9fa9b5ed0b0445f00fdbd577ac1534112f51510f74bd87bc2 +73929005be30c102d63b7251697512806da51bdec65b624d8391f29dea66 +9374ff3b6eb2b580e2735de61a835243095fea770d56c0643c0fa15e47ec +3a2ae9c8deecae7bde01e68ac2ec108fe23f3370c2823598a291cb7dcf13 +e8174b1c55f58b1721904f7f72fd3badd8bd0c65694608b7cc260c5c4801 +53e32fc0d340ab604ac10fa5ce26c0d03745524deb9fd8cc7f9a1bcd050c +e0cb6a842dfed52761259fae8ca2e2ffa8e52fb637f2db6aeaec66c1017b +64d6432884399931893f49fc96b719c7650db46ef7743e6ae5e062c39912 +5cc41866ba23c2ce5af2dd0896514145a2aca6d4ff8e71d169b064cacb3f +2cab77b34b2e7b6efa103a0500bf02453e327ddc59edbc07a8feec4d25e9 +dc9d86f7c65bc872188da32ed8a0edaf431cc32abb5672fb61256d55b6a8 +9da111703d609d59f8bf4a34cfaf1cff1b711314b8cd50b3eb61e99b9fcc +03e121448636749c1289a892ef822771f7637305eec6f2a799ee0f4ab30d +f3599ff553d7697408c67abad9f8131e141e2d65623d89574472c5baaacb +df67ea90065c766f01ef39449eff529461df1673cf8d8d818ac87a760000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA64o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F15 0 /0 F /TTA64o00 mF +/F15S190 F15 [400 0 0 -400 0 0 ] mFS +F15S190 Ji +3951 5112 M <0102030405060708>[244 133 222 135 243 178 156 0]xS +25200 VM? +11 dict begin +/FontName /TTA65o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb2206179c29b10360f66c +a9dee7eaab7087c8834ade2a458dcbc6003210ab90663c579b16d5f2ce6c +289056f18bbbaa7aa904d32ae457b267501aa32481206d0540c6bba57505 +8694477f31f801722d806719a2a318e17e8430363366539a22b2558b1534 +bba96abc799d72b761a18b2c5ca22c2a3c6303914df51cf07491bf3b7244 +369fcc5da2eab0caee099fbbb0e2f438e76541ae37f9f3d119c621e5a51c +a572a7c5b40ecf16281499ddc4df140e69be0f21ab05feaa553a96fb69c8 +d9b701aa432358791f0efb0ab57c37135b2c1d1012b3a87c88a1e8a1a275 +3eed718bcc969bf3d5875adb9c8b2200564fdea69b4caeb28e464106e61f +c5187d0970a0e7c36c269bce3bdbfbf22fd4f1bc331689d1530bb268af25 +c45973a5bec46df80df4f0508ec729d165203925c00b1c73901afdee68bd +1847b34a10e20895dda626c43113a6e11c32bcd477c84badbe23b0ca40a9 +4f0a0701a2edf14b4c675f538f80b98275c1f2c13cafbf673b46324465b3 +544c4a0dd3800d84bbfef594166bddfe875cbaaa9516fe53048319233ad7 +d73686dae086514c82a1d552d1b8f3a6df1b791fd32a6a283bdd970fd71c +850f34658e75c599798ab218c3156a8605bcf9d515ddc1b8d0005576767f +a29d14f78c241c98bbfcb13a5cfab805430803fa2c55076ee34a5eb931a6 +a0662c544d59541670e9590e47ff41453b3c561c78d712d270fceafa35b9 +0713c96a1ef5fabcde661f0989d01a640511c47de583b8057d975c2a1730 +9a663389f271616151f02c0eb8e072251bf1146ef961ce587d4a486c6848 +549f331b2ba7c9088f24fa105c4f2389debbb3c7d4368b838809bd4198d4 +b617b420fa507c503ae5c217e416b927495842333a8e251fc075be16e338 +51d62287e9a272f4843f62241e508b952d45ea728574320b996861f06f83 +5e8028a69dc579fc660dcc6afa67f4f47f94455cd2b29d326b7cda83b9ce +b204d080adce1134af535bfd59b989a29b9b84e3c73b5f1a87068b892236 +23efc8cb6f5677417d1d3cddd5d367fc20895ab7671d1e997b5f12668062 +c18059ecef3fe26c4b8a8103bcaf8767f1311bc2866b2fd0432208e63020 +f41007d7a9a43bf0a30eff53903299c2d88fd59163f9b7415653cbee5a60 +2c50c607edbf1bca3157aa3a013c4377c3b5088ff717e794ba8949e91a85 +e204ffd57976d7de79e70409e3a6cd0c180455719ed09ebc5888a175dc20 +735e3c69484fec32ad88014bdc0100e62455a6ce6be23b6e306948c9ec8d +98ba3e89a4858f7c4537908e733840cb3897529efe2bdda4192cae694ea7 +80edfc2c1f75d01b1a9c911e839f0776b7556e85348979159c2c1c9f1051 +141da74db4bed5098c80ff84d5187ca88570bc6f512f9a204d093cd6bbfb +438fe9d062a41575a6f8a5f7b44f9c82faac321ab9f4850c0803148cad84 +b339e314ffdb7c8dec381e0fdf3c3757d83102e26259909c380537f66182 +fbbf656daf939e7db6c69bfcf79fd281931f02ea1f33730f42d735b18496 +d6d9f08ebcfe70c55d966f671b28e9fd10e1b4151782eeeaf357f95a4319 +0d5b124f60c9a9c9af2d2a3f5c594f00628c46f13637d205428c4ce1dc88 +22e4d41e9fde4b177dd60e7be2fcf8d14d1f99a996ffdb71d712f22a91ef +8060d241b397dccad9198e5134d69c2ebb566cd530fc7c29a7a70d2bcf7a +d30c7215b65c686e676e1dd88311cb0d35d2e3c13e5a7bc1df44275fb7b0 +8a801c63f17e987643c7ed845713454afda90c825f0af5d8945429115a8f +cc65d3c2372ee22d1eb7764484ab397862e8c448479d4fdc5ca1d18abf5e +6b0b717dc116123298a80f59db58fa03af2027b2efbb59e115c30f0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA65o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F16 0 /0 F /TTA65o00 mF +/F16S1B1 F16 [433 0 0 -433 0 0 ] mFS +F16S1B1 Ji +3892 5602 M <0102030405060708>[264 144 241 145 264 192 169 0]xS +25200 VM? +11 dict begin +/FontName /TTA66o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb2206689a2c7f31fa5794 +54a6cc5be7a453c42c272f1015ef94322c3929a0ddefb938ab1522150251 +fdd9f6b70f2e773d4f8663aeccb0bfc787064307fa1dd2f8bc4dfd5c7205 +d9853547485a8d4f01ac00b1b09d2057d65671f1ecfa41c8223a5108e94e +eed8977391d4cdf5cc5898097984dcead7d3ea18561ddcbf4d05252b668a +16e0b09a7b46807271a79103ee35cd33f3f5562733fc8557b69e1eb31acf +17667bc44a27417541c228ececeab7e30fbda792ffb1d12490b7a763dd92 +7feae2dd8a29c69e1c33dc198ff3d1cfced187c07e67b604ae0d38df8d9c +f97994f52049867475193872d41dd75f54fd685f66a9ed9804118499b261 +00ec06d93e56caf1ea7fd932421a7b807451acdfe8b949268673a769babd +2fe767a6b050b34ff782968242657ff47cb62cf2a1616c809340e4fe22eb +ad2944863557a13c39e581d23eac63f64dfc9276c0341b148f86cc6d3116 +6bd106f158615eeefc789238bf3b2f9ecfdc343e3afe48ff47146aa2af53 +d3879ea5dd09f2a25db26346d5a113284a48541d9a940e9f8b9ad98596f0 +c788a3dcbf41c177bc55bba52512f887b2c5e8776efb804942e49ecfa60e +10b3e0a6a136e6da02b00b7a95bf805508eb0275a9e243b68c49a8554717 +3a1f750f860d6b50681d877660e47696b6a9f70ee9642d77678d8513fcc5 +da51a824f7a7a163b3416ae572593eb6e32392e6c4699995a1da11cc29c5 +ef52cbe73f49a3159c031ac87bbb2336e3d2618537c01288ad3c11f8f837 +aea942a32f1a9388126758aed7558987937ba918bb20896e46f8b80493b7 +827603e8e11953a56e2d406baf573f366a6c325d9585a36232356c876d22 +38917e0806d2de7624cfb33d7c2a6da2aae20ad18a8d5738d747b5cea624 +0bd371cfd8e59232a1b8f953aafa3065d393ffc28479fcf15350375753e3 +d8d4169d64023ad9200881d358cad783a45a67ae18f81263f801df120e8c +a9cd4636fd19024f4d7d50d84a4dbef10941e5b86650d89013c4aadf1206 +411b1c84e45f3baf8b5984fa9c5043dda578b736a14bcbdc7551a0fe7e62 +2e5055da5e7b6df296d868970d9589482e54edfdcd380850b2877f30d6dc +3fb72877575c1851710095b46311a4c3dd769809e100ab6dba6e80f4313e +6417460d7d99dbb9002e876ece579b6479c49d248050c5530883c07e5720 +b72e1543a51f7878463a760d7160da57b2c7cdda23684ba394f4fe456487 +8e26926386884961ff02a917786958ace479e4d34b42174558ba65e5feb2 +3708dc192d0ee9ffe2fc272aff62b3caf0276f66d18f838fdc15adea9faf +86c6e87e48c9997dd940d6a3a46063406a40f2f44758df815aa75453a10d +254f082d5abf98176fc8340a575a47b93d3bc46bbb2790d9fe6d9fd518a6 +fb3b4fe9331f2ba68762cc21c15e4a429217f86a26e802597785c3354878 +653c0c48ae31cd5eafca143ebe4a5ea475b5f10e658ed07cbc1266547d12 +d0c62598e3f3e802e53d0b99164ce825ac5165aa3e9fd4761c5451182e60 +1937322daaa63777230f33f9d45d638d32f5cf61868cbdbaf3b056cd9bf2 +b496a029387dbf63cd6cc636c2cbf3ce0c07e518c521f7b4fbd7b619f4d0 +7e9ffdeec465771a9ca8e9069f52eaa88cad66d47092ac1f5f52be036aed +d2d6f36153e22fa251aaf8b10da257dd14cb46163723013df097ffd16c33 +ddb8d3a4dd2fc6545550e4081ae70de8cc65a83f220212744bfb58cd2cd7 +29b17f2b842e4138a307cfa37adaaf9178ee510e2fd3d3f43b7efb0ba3f7 +a59e6ebeb4f2a35e908016cdf0383304b2cbfd02769cfd5ac9d8eba752f2 +ee6b8cf7287ba98fd5b2cb0e61647483659cb6b97f1ac442dac87c0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTA66o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F17 0 /0 F /TTA66o00 mF +/F17S1D3 F17 [467 0 0 -467 0 0 ] mFS +F17S1D3 Ji +3832 6132 M <0102030405060708>[284 156 259 156 285 207 181 0]xS +25200 VM? +11 dict begin +/FontName /TTBC3E32E0o00 def +/FontMatrix [1 2048 div 0 0 1 2048 div 0 0 ] def +/Encoding 256 array 0 1 255 {1 index exch /.notdef put} for def +/PaintType 0 def +/FontType 1 def +/FontBBox { 0 0 0 0 } def +AddFontInfoBegin +AddFontInfo +AddFontInfoEnd +currentdict +end + +currentfile eexec +9e67edc6f3ddb54d987dfb0ad4392351758f10eff40ef287a1387512b853 +046f6e589e2c97d48fdb38d54b68757f1dc48a239a5da408c2bfd473eac0 +3ab6b0025b87770e5f3b06904c282a51ee189ce871258447b47d83c5fad2 +326aa26e4c7f0ff21a841a463c859f102729802bbfa6ac0c2766f6b09317 +a247f37b339b99b7588bee2e861ed9de7a8990c512001ce21da50f4516f7 +553cc5df31ac42402c2b4e2b106773ccdac45a8dee89d3d35ce4f9afb022 +79592359efd5293f35df57216c84236a1347e922a61c45691be2c137b65f +08f4b3113b88e58dce4bd559387db7a00fe16460e5ab8fc835ea6ed9b938 +610bff26bc7ddabb1af7195ef7e654ee14a569bb220669f64824a95d9550 +e6b732d24163e5f1f14c0d8e68bffa74a7e923785ab628ea1b858f9c8898 +aa3a6a215f95d69b979cf88a88e66315daccf6b3e567737c55e3cf437e98 +6959eca072eb5947c0a09809b4d3d5430005f3fa1b9f519f0635d2e185f7 +4e1eec5a19e358c5609375ecd636499ee362b08643e4c00019c76096365d +ae34a30b033cf6378a4a47f08172f46c61310b971071ca9fcd6dcd1b9ad6 +63809fcecd4cd2183f3a5a9de5c683838022bd1362f59a5b864d29a4d185 +4ca19a30f903bb33d1ca039f71e2039cc453297c2bae1af6d32d72092a4c +b00fc35b50397d28064e83425bcb8aa2802cb275252b0e70d9983b36eab5 +6caeb1305e4f95ac5edc55b2d2ec626088c80766ae22d5f2ed6bd822b754 +d1c1004291d98617b4ea4915642deb170ab38bcf01dbc7d461b8c4bbde17 +e6745cf0bc1d064418fbed78f744269daef38817c6f073c543dbdf219dd0 +1846e629428c6636dcc0d80038222a8ef4fe9a380b2f0e6e2c4bca8c39fe +f4a6d3b66af29ba79996bdb5389abf14ec305653c6de8e1b55effb93dcf6 +6bcb0eec3c735bf981b03907a3ffcb25b51f3f6b7632ca38e91975702745 +98993eaef2ad15901aa3ef965171e4a386b664bd21f943b3482afd2c1412 +151ad3e78b340945c8c5faadab4d79d6b3e1017cb933af412dcbfb368b7f +4790d99ab75ad1715248a31296f12d99ae05aceaa4d28ac45fb01ed9abdf +c7eb1ecb1de617a14454f6ba1578cbefdadcd3684cc47b453c763c730436 +8f32d78e11012ea6d3d16ca5bf67951a742d405591ac3ee6d5164e890891 +e10c21777eb10661f8c88e5bfa6326d51a8ca574f3321b5cc05631bf331a +ed2f169a77e8ddecba5e03eb7df19b634f20a0353685b98668fb79295051 +ce2ccd8487a1d0da7d9bb3dd3cb1e3df220fc81841cbd0b3719fbfa27809 +379e5f3e7900be85b9e2bee893085d9bd17b9cb7174367d80bc06d7cb841 +566f2ac1d0e5a1f01dc1cdf58195977393929340b5746f4bc1f3e3ee6f5f +df3941a5deb99672255cabaac0ea3657a449c28267bc9dbd448fdfe12b52 +fe91ed89405246fe3b6d63c89536f8659fe660ae005adbf01c3c2729913d +2117f8e2dec91751be554a057dd7998e15b9d02377d6a6d5c83b1091fb8b +1c7c358f13b4dc00839db3fe4cb9163f5ffc725b1561a2d3e4faab96bd11 +bcc159c4be2dda581cd695dd41635fee2c8b1e5d8dd4b35a59bdcc368ab5 +9bb2ce9799ca98dffa60212f587b7f99b3788f3b052c7a83d31ede5e21cf +ccedc821552ae0faee16444c26e489d37034f8ba4c811ea5728bc16dcf9a +217958e8f745e87c917536ff3899b13d00bf631cc449eda3934a726bce8a +154519d6192fe111443b7d039f3844f6a95bc56142d31970ed4a8e7936b0 +0ff7c795cc2bdb4b82616d7fe32c0a76ed3dc837b238905ebe9cf2d9bb7c +62bf9ef3fd62d6adbd8928e5cfcc6e01ece9fdc2496b7eaed14d0dd56d31 +123b9ff1712c0e67d00c73ae48d61688a2bb8dcbf8a5a8523aea76f8f107 +554df15d3fc6db019c97efcd6c3cc837a222851ed21e92e0c658a556f7ee +52268c8787600227471918fa7e32d787c76277b7eda00bfa4fcd5730b724 +20333168b0b79fa2ae46c639399cfae05eb45df153448d831698d38be55e +1aab21503e8011f9889d8ed64e9d29ac7e298f1136d7cabda06b452c1257 +5d655523016b8302cf0e2d66b310f6ee0cb7e725752b4f2c346b89f98453 +b2abcad50dac1dea9c9d842fd37a409b73621d99599d9d6fc10d2441de0f +808e63bed2a5d2c2f6b34098aa3facbf6d379b4d1575008ba866446ca1b6 +8aa5d4961e3c2f05b4beb6fc4695f7dea133aba05385434a26db160000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +/TTBC3E32E0o00 findfont /Encoding get +dup 1 /E put +dup 2 /I put +dup 3 /S put +dup 4 /hyphen put +dup 5 /T put +dup 6 /e put +dup 7 /s put +dup 8 /t put +pop +F /F18 0 /0 F /TTBC3E32E0o00 mF +/F18S215 F18 [533 0 0 -533 0 0 ] mFS +F18S215 Ji +3713 6730 M <0102030405060708>[326 177 296 178 325 238 206 0]xS +/F18S258 F18 [600 0 0 -600 0 0 ] mFS +F18S258 Ji +3595 7407 M <0102030405060708>[366 200 334 200 367 266 232 0]xS +/F18S29B F18 [667 0 0 -667 0 0 ] mFS +F18S29B Ji +3477 8158 M <0102030405060708>[407 222 371 222 407 295 260 0]xS +/F18S2DD F18 [733 0 0 -733 0 0 ] mFS +F18S2DD Ji +3358 8987 M <0102030405060708>[448 243 409 244 447 325 285 0]xS +/F18S320 F18 [800 0 0 -800 0 0 ] mFS +F18S320 Ji +3239 9893 M <0102030405060708>[489 266 445 266 489 355 310 0]xS +/F18S384 F18 [900 0 0 -900 0 0 ] mFS +F18S384 Ji +3062 10906 M <0102030405060708>[549 300 500 300 550 399 350 0]xS +/F18S3E8 F18 [1000 0 0 -1000 0 0 ] mFS +F18S3E8 Ji +2884 12034 M <0102030405060708>[610 334 555 333 611 444 388 0]xS +LH +(%%[Page: 1]%%) = +%%PageTrailer + +%%Trailer +%%BoundingBox: 18 18 577 824 +%%DocumentNeededResources: +%%DocumentSuppliedResources: +%%+ procset Pscript_WinNT_ErrorHandler 5.0 0 +%%+ procset Pscript_FatalError 5.0 0 +%%+ procset Pscript_Win_Basic 5.0 0 +%%+ procset Pscript_Win_Utils_L2 5.0 0 +%%+ procset Pscript_Text 5.0 0 +Pscript_WinNT_Incr dup /terminate get exec +ehsave restore +%%Pages: 1 +(%%[LastPage]%%) = +%%EOF +
\ No newline at end of file diff --git a/testgraphical/source/CallExternals.pm b/testgraphical/source/CallExternals.pm new file mode 100644 index 000000000000..a0a3b1ae716a --- /dev/null +++ b/testgraphical/source/CallExternals.pm @@ -0,0 +1,539 @@ +package CallExternals; + +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +use English; +use warnings; +use strict; +use loghelper; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + # if using RCS/CVS, this may be preferred + $VERSION = do { my @r = (q$Revision: 1.29 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + @ISA = qw(Exporter); + @EXPORT = qw(&callphp &getPHPExecutable &ExecSQL &callperl &getPerlExecutable &calljava &setJavaExecutable &getJavaExecutable &setToolsPath "e "eIfNeed &set_logfile &close_logfile ); + %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], + # your exported package globals go here, + # as well as any optionally exported functions + @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); +} + +# ------------------------------------------------------------------------------ +# small helper, which replaces the return code +sub errorAdaption($) +{ + my $error = shift; + if ($error != 0) + { + $error = $error / 256; + } + if ($error > 127) + { + $error = $error - 256; + } + return $error; +} +# ------------------------------------------------------------------------------ +# helper to call external php with popen +sub callphp($$$) +{ + local *IN_FILE; + my $phpexe = shift; + my $phpprogram = shift; + my $sParams = shift; + my $line; + my $error; + my @result; + + # print "Will send: $phpexe $sParams\n"; + # log_print("CALLPHP: $phpexe $phpprogram $sParams\n"); +# if (open(IN_FILE, "$phpexe $sParams 2>&1 |")) + if (open(IN_FILE, "$phpexe $phpprogram $sParams |")) + { + while ($line = <IN_FILE>) + { + chomp($line); + # $line .= " "; + push(@result, $line); + # print "callphp output: $line\n"; + } + close(IN_FILE); + $error = errorAdaption($?); + } + else + { + print "callphp(): Can't popen '$phpexe' with parameter: '$sParams'\n"; + $error = 1; + } + return $error, @result; +} + +# ------------------------------------------------------------------------------ +sub getPHPExecutable() +{ + my $phpexe; + if ($OSNAME eq "solaris") + { + $phpexe = "php5"; + } + elsif ($OSNAME eq "linux") + { + if ( -e "/usr/bin/php5") # Suse :-( + { + $phpexe = "php5"; + } + elsif ( -e "/usr/bin/php") # Gentoo + { + $phpexe = "php"; + } + else + { + print "getPHPExecutable(): no php exec found.\n"; + } + } + elsif ( $OSNAME eq "MSWin32" ) + { + $phpexe = "C:/programme/php/php.exe"; + # add second try (xampp) + if (! -e $phpexe) + { + $phpexe = "C:/xampp/php/php.exe"; + } + } + elsif ( $OSNAME eq "cygwin" ) + { + $phpexe = "/cygdrive/c/programme/php/php"; + } + else + { + print "getPHPExecutable(): unknown environment. ($OSNAME)\n"; + } + if (! $phpexe) + { + print "getPHPExecutable(): ERROR: php executable not found.\n"; + exit(1); + } + return $phpexe; +} +# ------------------------------------------------------------------------------ +# helper to call external java with popen +sub calljava($$$) +{ + local *IN_FILE; + my $javaexe = shift; + my $sParams = shift; + my $sDebug = shift; + my $line; + my $error = 1; + + if (! $javaexe) + { + log_print("ERROR: javaexe not set.\n"); + return; + } + if (! $sDebug) + { + $sDebug = ""; + } + $javaexe = quoteIfNeed($javaexe); + log_print ("CALLJAVA: $javaexe $sDebug $sParams\n"); + if (open(IN_FILE, "$javaexe $sDebug $sParams 2>&1 |")) + { + while ($line = <IN_FILE>) + { + chomp($line); + log_print ("- $line\n"); + } + close(IN_FILE); + $error = errorAdaption($?); + } + else + { + log_print ("calljava(): Can't popen '$javaexe' with parameter '$sParams'\n"); + $error = 1; + } + return $error; +} + +# ------------------------------------------------------------------------------ +sub getPerlExecutable() +{ + my $perlexe; + if ( $ENV{PERL} ) + { + $perlexe = $ENV{PERL}; + } + elsif ( $ENV{PERLEXE} ) + { + $perlexe = $ENV{PERLEXE}; + } + else + { + if ($OSNAME eq "MSWin32") + { + $perlexe="C:/xampp/perl/bin/perl.exe"; + if (! -e $perlexe) + { + $perlexe="r:/btw/perl/bin/perl"; + } + if (! -e $perlexe) + { + $perlexe="C:/Programme/Perl/bin/perl.exe"; + } + } + elsif ($OSNAME eq "cygwin") + { + $perlexe = "perl"; + } + elsif ($OSNAME eq "solaris") + { + $perlexe="/so/env/bt_solaris_intel/bin/perl"; + } + elsif ($OSNAME eq "linux") + { + $perlexe="/so/env/bt_linux_libc2.32/DEV300/bin/perl"; + } + else + { + log_print "WARNING: Use only the fallback of perl executable.\n"; + $perlexe = "perl"; # FALLBACK + } + } + if ( ! -e $perlexe) + { + log_print "getPerlExecutable(): There exist no perl executable.\n"; + exit(1); + } + return $perlexe; +} +# ------------------------------------------------------------------------------ +# helper to call external perl with popen +sub callperl($$$) +{ + local *IN_FILE; + my $perlexe = shift; + my $perlprogram = shift; + my $sParams = shift; + my $line; + my $error; + + log_print("CALLPERL: $perlexe $perlprogram $sParams\n"); +# if (open(IN_FILE, "$perlexe $sParams 2>&1 |")) + if (open(IN_FILE, "$perlexe $perlprogram $sParams |")) + { + while ($line = <IN_FILE>) + { + chomp($line); + log_print ("- $line\n"); + } + close(IN_FILE); + $error = errorAdaption($?); + } + else + { + log_print ("Can't popen '$perlexe' with parameter: '$sParams'\n"); + $error = 1; + } + return $error; +} +# ------------------------------------------------------------------------------ +our $sJavaExecutable; +sub setJavaExecutable($) +{ + $sJavaExecutable = shift; +} + +# sub getJava14() +# { +# my $sJava14; +# if ($OSNAME eq "MSWin32") +# { +# if ($sJavaExecutable) +# { +# $sJava14 = $sJavaExecutable; +# } +# else +# { +# # HARDCODE! +# $sJava14 = "C:\\Programme\\Java\\j2re1.4.2_10\\bin\\java.exe"; +# } +# } +# else +# { +# if ($sJavaExecutable) +# { +# $sJava14 = $sJavaExecutable; +# } +# else +# { +# # HARDCODE! +# $sJava14 = "/opt/java14/bin/java"; +# } +# } +# if ( ! -e $sJava14 ) +# { +# log_print ("Java14 not found. Is searched in '$sJava14'\n"); +# # exit(1); +# return ""; +# } +# return $sJava14; +# } +# ------------------------------------------------------------------------------ +sub getJava15() +{ + my $sJava15; + if ($sJavaExecutable) + { + $sJava15 = $sJavaExecutable; + } + else + { + if ($OSNAME eq "MSWin32") + { + # HARDCODE! + $sJava15 = "C:\\Programme\\Java\\jre1.5.0_22\\bin\\java.exe"; + if ( ! -e $sJava15) + { + $sJava15 = "C:\\Program Files\\Java\\jre6\\bin\\java.exe"; + } + if ( ! -e $sJava15) + { + $sJava15 = "C:\\Java\\jdk1.6\\bin\\java.exe"; + } + } + elsif ($OSNAME eq "cygwin") + { + $sJava15 = "java"; + } + else + { + # HARDCODE! + if ($OSNAME eq "solaris") + { + $sJava15 = "/usr/bin/java"; + } + else + { + $sJava15 = "/usr/bin/java"; + if ( ! -e $sJava15 ) + { + $sJava15 = "/opt/java15/bin/java"; + } + } + } + if ( ! -e $sJava15 ) + { + log_print ("Java15 not found. Is searched in '$sJava15'\n"); + # exit(1); + return ""; + } + } + return $sJava15; +} +# ------------------------------------------------------------------------------ +sub getJava16() +{ + my $sJava16; + if ($sJavaExecutable) + { + $sJava16 = $sJavaExecutable; + } + else + { + if ($OSNAME eq "MSWin32") + { + # HARDCODE! + $sJava16 = "C:\\Programme\\Java\\jre1.6.0_16\\bin\\java.exe"; + if ( ! -e $sJava16) + { + $sJava16 = "C:\\Program Files\\Java\\jre6\\bin\\java.exe"; + } + if ( ! -e $sJava16) + { + $sJava16 = "C:\\Java\\jdk1.6\\bin\\java.exe"; + } + # } + } + elsif ($OSNAME eq "cygwin") + { + # $sJava16 = "java"; + $sJava16 = "C:/Program Files/Java/jdk1.6.0_16/bin/java.exe"; + } + else + { + # HARDCODE! + if ($OSNAME eq "solaris") + { + $sJava16 = "/usr/bin/java"; + } + else + { + $sJava16 = "/usr/bin/java"; + if ( ! -e $sJava16 ) + { + $sJava16 = "/opt/java16/bin/java"; + } + } + } + if ( ! -e $sJava16 ) + { + log_print ("Java16 not found. Is searched in '$sJava16'\n"); + # exit(1); + return ""; + } + } + return $sJava16; +} + +# ------------------------------------------------------------------------------ +sub getJavaExecutable() +{ + return getJava16(); +} + +# ------------------------------------------------------------------------------ +# this function is a helper for parameters +# if quotes the whole string with 'STR' or "STR" and replace quotes in it's content for the right. +sub singleQuote($) +{ + my $sStr = shift; + if ( $OSNAME eq "MSWin32") + { + # we are MSWin32 (quote \" stronger) + # $sStr =~ s/\'/\"/g; + $sStr =~ s/\'/\\\"/g; + return "\"" . $sStr . "\""; + } + else + { + if (index($sStr, "'") >= 0) + { + # replace all single quotes ("'") by "\"" + $sStr =~ s/\'/\"/g; + } + } + return "'" . $sStr . "'"; +} + +sub quote($) +{ + my $sName = shift; + return "\"" . $sName . "\""; +} + +sub quoteIfNeed($) +{ + my $sName = shift; + if (-1 != index($sName, " ")) + { + return quote($sName); + } + return $sName; +} + + +# ------------------------------------------------------------------------------ +our $sToolsPath; +sub setToolsPath($) +{ + my $sNewPath = shift; + $sToolsPath = $sNewPath; +} + +sub ExecSQL($) +{ + my $sSQL = shift; + + my $error; + my @aResult; + my $sSQLDirect; + if ($sToolsPath) + { + $sSQLDirect = $sToolsPath; + $sSQLDirect .= "/"; + } + $sSQLDirect .= "sql_direct.php"; + + # select(undef, undef, undef, 0.060); + # log_print("ExecSQL: $sSQL\n"); + # sleep (1); + ($error, @aResult) = callphp(getPHPExecutable(), $sSQLDirect, singleQuote($sSQL)); + if ($error) + { + log_print ("ExecSQL: An Error occured.\n"); + log_print ("PHP: " . getPHPExecutable() . "\n"); + log_print ("SQL Statement: " . singleQuote($sSQL) . "\n"); + # exit(1); + } + # select(undef, undef, undef, 0.125); + # sleep (1); + return @aResult; +} + +# ------------------------------------------------------------------------------ +# helper to call external php with popen +# sub callexe($$$) +# { +# local *IN_FILE; +# my $exe = shift; +# my $program = shift; +# my $sParams = shift; +# my $line; +# my $error; +# my @result; +# +# $exe = quoteIfNeed($exe); +# $program = quoteIfNeed($program); +# +# # print "Will send: $exe $sParams\n"; +# # log_print("CALLEXE: $exe $program $sParams\n"); +# if (open(IN_FILE, "$exe $program $sParams |")) +# { +# while ($line = <IN_FILE>) +# { +# chomp($line); +# # $line .= " "; +# push(@result, $line); +# # print "callphp output: $line\n"; +# } +# close(IN_FILE); +# $error = errorAdaption($?); +# } +# else +# { +# print "Can't popen '$exe' with parameter: '$sParams'\n"; +# $error = 1; +# } +# return $error, @result; +# } + +1; diff --git a/testgraphical/source/ConvwatchHelper.pm b/testgraphical/source/ConvwatchHelper.pm new file mode 100644 index 000000000000..8f157641b1f4 --- /dev/null +++ b/testgraphical/source/ConvwatchHelper.pm @@ -0,0 +1,574 @@ +package ConvwatchHelper; + +use English; +use warnings; +use strict; +use Cwd; +use Cwd 'chdir'; + +use CallExternals; +use stringhelper; +use filehelper; +use oshelper; +use loghelper; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + # if using RCS/CVS, this may be preferred + $VERSION = do { my @r = (q$Revision: 1.39 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + @ISA = qw(Exporter); + @EXPORT = qw(&getQADEVToolsPath &setProjectRoot &getProjectRoot &checkForStop &getSofficeExe &setINPATH); + %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], + # your exported package globals go here, + # as well as any optionally exported functions + @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); +} + +# ------------------------------------------------------------------------------ +our $tempprefix; + +# sub getTempDir() +# { +# my $sTempDir; +# if (! $tempprefix) +# { +# if ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") +# { +# # $tempdir = "C:/gfxcmp/temp"; +# $tempprefix = "//so-gfxcmp-lin/gfxcmp-data/wntmsci/temp"; +# } +# elsif ($OSNAME eq "linux") +# { +# $tempprefix = "/net/so-gfxcmp-lin/export/gfxcmp/data/unxlngi/temp"; +# } +# elsif ($OSNAME eq "solaris") +# { +# # $tempdir = "/space/gfxcmp/temp"; +# $tempprefix = "/net/so-gfxcmp-lin/export/gfxcmp/data/unxsoli/temp"; +# } +# else +# { +# print "Error: This environment isn't supported yet.\n"; +# exit(1); +# } +# } +# $sTempDir = $tempprefix; +# return $sTempDir; +# } +# ------------------------------------------------------------------------------ +# in filehelper +# our $programprefix; +# +# sub getProgramPrefix($) +# { +# my $sDBDistinct = shift; +# +# my $sProgramPrefix; +# if (! $programprefix) +# { +# if ($OSNAME eq "MSWin32") +# { +# # $programprefix = "C:/gfxcmp/programs"; +# $programprefix = "C:/gp"; +# } +# elsif ($OSNAME eq "linux") +# { +# $programprefix = "/space/gfxcmp/programs"; +# } +# elsif ($OSNAME eq "solaris") +# { +# $programprefix = "/space/gfxcmp/programs"; +# } +# else +# { +# print "Error: This environment isn't supported yet.\n"; +# exit(1); +# } +# } +# $sProgramPrefix = appendPath($programprefix, substr($sDBDistinct, 0, 19)); +# return $sProgramPrefix; +# } +# ------------------------------------------------------------------------------ +sub getQADEVToolsPath() +{ + my $sNewPath = appendPath(getToolsPrefix(), "qadev"); + $sNewPath = appendPath($sNewPath, "scripts"); + $sNewPath = appendPath($sNewPath, "gfxcmp_ui"); + return $sNewPath; +} + +# in filehelper +# our $toolsprefix; +# +# sub getToolsPrefix() +# { +# my $sToolsPrefix; +# if (! $toolsprefix) +# { +# if ($OSNAME eq "MSWin32") +# { +# $toolsprefix = "C:/gfxcmp/tools"; +# } +# elsif ($OSNAME eq "linux") +# { +# $toolsprefix = "/space/gfxcmp/tools"; +# } +# elsif ($OSNAME eq "solaris") +# { +# $toolsprefix = "/space/gfxcmp/tools"; +# } +# else +# { +# print "Error: This environment isn't supported yet.\n"; +# exit(1); +# } +# } +# $sToolsPrefix = $toolsprefix; +# return $sToolsPrefix; +# } +# ------------------------------------------------------------------------------ +our $sProjectRoot; +sub setProjectRoot($) +{ + $sProjectRoot = shift; + log_print "\$sProjectRoot := $sProjectRoot\n"; +} +sub getProjectRoot() +{ + if ($sProjectRoot) + { + return $sProjectRoot; + } + die "setProjectRoot(PATH) not set.\n"; +} + +our $sINPATH; +sub setINPATH($) +{ + $sINPATH = shift; +} +sub getINPATH() +{ + if ($sINPATH) + { + return $sINPATH; + } + die "setINPATH(PATH) not set.\n"; +} +our $dataprefix; + +# sub getDataPrefix() +# { +# my $sDataPrefix; +# if (! $dataprefix) +# { +# if ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") +# { +# # $dataprefix = "C:/gfxcmp/data"; +# # $dataprefix = "//so-gfxcmp-lin/gfxcmp-data/wntmsci"; +# $dataprefix = getProjectRoot(); +# } +# elsif ($OSNAME eq "linux") +# { +# # $dataprefix = "/space/gfxcmp/data"; +# # $dataprefix = "/net/so-gfxcmp-lin/export/gfxcmp/data/unxlngi"; +# $dataprefix = getProjectRoot(); +# } +# elsif ($OSNAME eq "solaris") +# { +# # $dataprefix = "/space/gfxcmp/data"; +# # $dataprefix = "/net/so-gfxcmp-lin/export/gfxcmp/data/unxsoli"; +# $dataprefix = getProjectRoot(); +# } +# else +# { +# print "Error: This environment isn't supported yet.\n"; +# exit(1); +# } +# $dataprefix = appendPath(getProjectRoot(), getINPATH()); +# $dataprefix = appendPath($dataprefix, "data"); +# } +# $sDataPrefix = $dataprefix; +# return $sDataPrefix; +# } + +# ------------------------------------------------------------------------------ + +# sub _shortsleep($) +# { +# # sleep 1; +# select(undef, undef, undef, 0.333); +# } +# +# sub _waitInSeconds($) +# { +# my $nLength = shift; +# my $i; +# my $j; +# +# for ($j=0;$j<$nLength;$j++) +# { +# for ($i=0;$i<$j;$i++) +# { +# print "."; +# } +# for ($i=$j;$i<$nLength;$i++) +# { +# print " "; +# } +# _shortsleep( 1 ); +# print "\r"; +# } +# +# for ($j=0;$j<=$nLength;$j++) +# { +# for ($i=0;$i<$j;$i++) +# { +# print " "; +# } +# for ($i=$j;$i<$nLength;$i++) +# { +# print "."; +# } +# _shortsleep( 1 ); +# print "\r"; +# } +# } +# +# sub wait30seconds() +# { +# _waitInSeconds(20); +# _waitInSeconds(20); +# } + +sub checkForStop($) +{ + my $sStopFilename = shift; + my $sStopFilePath; + if ($OSNAME eq "MSWin32") + { + $sStopFilePath = "C:/temp/"; + } + else + { + $sStopFilePath = "/tmp/"; + } + my $sStopFile = $sStopFilePath . $sStopFilename; + if ( -e "$sStopFile" ) + { + print "Stop of Convwatch tool forced!\n"; + unlink($sStopFile); + exit(2); + } +} + +# ---------------------------------------------------------------------------------------- +sub readdirectory($$$); + +sub readdirectory($$$) +{ + my $startdir = shift; + my $sUserParameter = shift; + my $hook = shift; + + my $myfile; + + local *DIR; + chdir $startdir; + cwd(); + + my $nCountFiles = 0; + if (opendir (DIR, $startdir)) # Directory oeffnen + { + while ($myfile = readdir(DIR)) + { # ein filename holen + #if (! -l $myfile) # not a link + #{ + if (-d $myfile ) # is a directory + { + if ( -l $myfile) + { + next; + } + # if ( $myfile eq "help" || + # $myfile eq "presets" || + # $myfile eq "registry" || + # $myfile eq "uno_packages" || + # $myfile eq "lib" || + # $myfile eq "user_tree" ) + # { + # next; + # } + + if ($myfile ne "." && $myfile ne "..") + { + my $sNewStartDir = appendPath($startdir, $myfile); # neuen Directorystring erstellen + # if ($sNewStartDir =~ "^\/proc" || + # $sNewStartDir =~ "^\/dev" || + # $sNewStartDir =~ "^\/udev" || + # $sNewStartDir =~ "lost+found" ) + # { + # next; + # } + # my $sNewSUserParameter = $sUserParameter . $myfile ."/"; + # do a recursive call + # $nCountFiles++; + my $nFileCount = readdirectory($sNewStartDir, $sUserParameter, $hook); + # workOnDir($sNewDir, $nFileCount); + $nCountFiles += $nFileCount; + + chdir ($startdir); # zurueckwechseln. + cwd(); + } + } + else + { + # File must exist, be a regular file and must not be the $onlyOnFile + if (-f $myfile) + { + # print STDERR " $startdir" . "$myfile\n"; + $nCountFiles++; + # workOnFile($startdir, $myfile, $destdir); + $hook->($startdir, $myfile, $sUserParameter); + } + } + #} + #else + #{ + # print STDERR "linked file: $dir/$myfile\n"; + #} + } + closedir(DIR); + } + else + { + print STDERR "could not open $startdir\n"; + } + return $nCountFiles; +} + +our $lcl_sSofficeBinPath; +our $lcl_sSofficeBinName; + +sub searchSofficeBin($$$) +{ + my $currentDir = shift; + my $currentFile = shift; + my $sUserParameter = shift; + + if ($currentFile eq $sUserParameter) + { + my $sSourceFilename; + $sSourceFilename = appendPath($currentDir, $currentFile); + + if ( -e "$sSourceFilename" ) + { + $lcl_sSofficeBinPath = $currentDir; + $lcl_sSofficeBinName = $currentFile; + } + } +} + +# our $lcl_sUnoPkgPath; +# +# sub searchUnoPkgBin($$$) +# { +# my $currentDir = shift; +# my $currentFile = shift; +# my $sUserParameter = shift; +# +# if ($currentFile eq $sUserParameter) +# { +# my $sSourceFilename; +# $sSourceFilename = appendPath($currentDir, $currentFile); +# if ( -e "$sSourceFilename" ) +# { +# $lcl_sUnoPkgPath = $currentDir; +# } +# } +# } + +# our $lcl_sJARPath; + +# sub searchJARFile($$$) +# { +# my $currentDir = shift; +# my $currentFile = shift; +# my $sUserParameter = shift; +# +# if ($currentFile eq $sUserParameter) +# { +# my $sSourceFilename; +# $sSourceFilename = appendPath($currentDir, $currentFile); +# if ( -e "$sSourceFilename" ) +# { +# $lcl_sJARPath = $currentDir; +# } +# } +# } + +# return the PATH, where the file was found +# sub searchForJAR($$) +# { +# my $sPathToInstallOffice = shift; +# my $sJARFileName = shift; +# +# my $sCurrentPath = cwd(); +# +# $lcl_sJARPath = ""; +# readdirectory(${sPathToInstallOffice}, ${sJARFileName}, \&searchJARFile); +# +# chdir $sCurrentPath; +# cwd(); +# +# return $lcl_sJARPath; +# } + +# sub getUnoPkg($) +# { +# my $sPathToInstallOffice = shift; +# +# my $sUnoPkgName = "unopkg.bin"; +# if (isWindowsEnvironment()) +# { +# $sUnoPkgName = "unopkg.exe"; +# } +# +# my $sCurrentPath = cwd(); +# +# $lcl_sUnoPkgPath = ""; +# readdirectory(${sPathToInstallOffice}, ${sUnoPkgName}, \&searchUnoPkgBin); +# +# chdir $sCurrentPath; +# cwd(); +# +# return ($lcl_sUnoPkgPath, $sUnoPkgName); +# } + +sub getSofficeExe($) +{ + my $sPathToOffice = shift; + + my $sSofficeExeName = "soffice"; + if (isWindowsEnvironment()) + { + $sSofficeExeName = "soffice.exe"; + } + + my $sCurrentPath = cwd(); + + $lcl_sSofficeBinPath = ""; + $lcl_sSofficeBinName = ""; + readdirectory(${sPathToOffice}, ${sSofficeExeName}, \&searchSofficeBin); + + chdir $sCurrentPath; + cwd(); + + return ($lcl_sSofficeBinPath, $lcl_sSofficeBinName); +} + +# sub checkOfficeAlreadyInstalled($) +# { +# my $sOfficePath = shift; +# +# my $sCurrentPath = cwd(); +# +# $lcl_sSofficeBinPath = ""; +# my $sOldOfficePath = appendPath($sOfficePath, "program"); +# if ( -d "$sOldOfficePath" ) +# { +# $sOldOfficePath = appendPath($sOldOfficePath, "soffice.bin"); +# if ( -e $sOldOfficePath ) +# { +# return 1; +# } +# } +# else +# { +# if (isWindowsEnvironment()) +# { +# my $sThreeLayerOffice = appendPath($sOfficePath, "Sun"); +# $sThreeLayerOffice = appendPath($sThreeLayerOffice, "StarOffice 9"); +# $sThreeLayerOffice = appendPath($sThreeLayerOffice, "program"); +# $sThreeLayerOffice = appendPath($sThreeLayerOffice, "soffice.bin"); +# +# if ( -e "$sThreeLayerOffice" ) +# { +# return 1; +# } +# } +# else +# { +# my $sThreeLayerOffice = appendPath($sOfficePath, "staroffice9"); +# $sThreeLayerOffice = appendPath($sThreeLayerOffice, "program"); +# $sThreeLayerOffice = appendPath($sThreeLayerOffice, "soffice.bin"); +# if ( -e "$sThreeLayerOffice" ) +# { +# return 1; +# } +# } +# } +# +# # soffice.bin not found in fast path +# readdirectory($sOfficePath, "soffice.bin", \&searchSofficeBin); +# chdir $sCurrentPath; +# cwd(); +# +# if ( $lcl_sSofficeBinPath ne "" ) +# { +# return 1; +# } +# return 0; +# # this is the old check +# # my $sOfficePathCheck = appendPath(${sPathToInstallOffice}, "program"); +# # $sOfficePathCheck = appendPath($sOfficePathCheck, "soffice.bin"); +# # if ( -e $sOfficePathCheck ) +# # { +# # return 1; +# # } +# # +# # # check path system of tree layer office +# # if ( isWindowsEnvironment() ) +# # { +# # $sOfficePathCheck = appendPath(${sPathToInstallOffice}, "Sun"); +# # if ( ! -e $sOfficePathCheck) +# # { +# # # could be an OpenOffice.org +# # return 0; +# # } +# # else +# # { +# # +# # $sOfficePathCheck = appendPath($sOfficePathCheck, "StarOffice 9"); +# # $sOfficePathCheck = appendPath($sOfficePathCheck, "program"); +# # $sOfficePathCheck = appendPath($sOfficePathCheck, "soffice.bin"); +# # if ( -e $sOfficePathCheck ) +# # { +# # return 1; +# # } +# # print "Error: There exist no Office, maybe an unsupported version?\n"; +# # } +# # } +# # elsif ( isUnixEnvironment() ) +# # { +# # $sOfficePathCheck = appendPath(${sPathToInstallOffice}, "staroffice9"); +# # $sOfficePathCheck = appendPath($sOfficePathCheck, "staroffice9"); +# # $sOfficePathCheck = appendPath($sOfficePathCheck, "program"); +# # $sOfficePathCheck = appendPath($sOfficePathCheck, "soffice.bin"); +# # if ( -e $sOfficePathCheck ) +# # { +# # return 1; +# # } +# # print "Error: There exist no Office, maybe an unsupported version?\n"; +# # } +# # else +# # { +# # print "Error: There exist no Office, maybe an unsupported version?\n"; +# # } +# # return 0; +# } + +1; diff --git a/testgraphical/source/compare.pl b/testgraphical/source/compare.pl new file mode 100644 index 000000000000..4aef877dc2b7 --- /dev/null +++ b/testgraphical/source/compare.pl @@ -0,0 +1,408 @@ +eval 'exec perl -wS $0 ${1+\"$@\"}' + if 0; + +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +BEGIN +{ + # Adding the path of this script file to the include path in the hope + # that all used modules can be found in it. + $0 =~ /^(.*)[\/\\]/; + push @INC, $1; + # print "PATH: " . $1 . "\n"; +} + +# my $e; +# foreach $e (keys %ENV) +# { +# print "$e := $ENV{$e}" . "\n"; +# } + +use strict; +use graphical_compare; +use ConvwatchHelper; +use filehelper; +use timehelper; +use loghelper; + +use Cwd; +use File::Basename; +use Getopt::Long; +use English; # $OSNAME, ... +use File::Path; +use Cwd 'chdir'; + +our $help; # Help option flag +our $version; # Version option flag +# our $test; + +# our $MAJOR; +# our $MINOR; +# our $cwsname; +our $pool; +our $document; +our $creatortype; +our $prepareonly = 0; +our $force; +our $verbose = 0; +our $show = 0; +our $connectionstring; + +# Prototypes +sub print_usage(*); +sub prepare(); +sub CompareFiles($$); + +# flush STDOUT +# my $old_handle = select (STDOUT); # "select" STDOUT and save # previously selected handle +# $| = 1; # perform flush after each write to STDOUT +# select ($old_handle); # restore previously selected handle + +$OUTPUT_AUTOFLUSH=1; # works only if use English is used. + +our $version_info = 'compare.pl'; + +GetOptions( +# "MAJOR=s" => \$MAJOR, +# "MINOR=s" => \$MINOR, +# "cwsname=s" => \$cwsname, + "pool=s" => \$pool, + "document=s" => \$document, + "creatortype=s" => \$creatortype, + "prepareonly=s" => \$prepareonly, + "connectionstring=s" => \$connectionstring, + + "force" => \$force, + "verbose" => \$verbose, + "show" => \$show, + +# "test" => \$test, + "help" => \$help, + "version" => \$version + ); + +if ($help) +{ + print_usage(*STDOUT); + exit(0); +} +# Check for version option +if ($version) +{ + print STDERR "$version_info\n"; + exit(0); +} + +if ($prepareonly) +{ + $force=1; +} + +prepare(); +if ($connectionstring) +{ + setConnectionString($connectionstring); +} + +my $sDocumentPool = appendPath(getProjectRoot(), "document-pool"); +# print "ProjectRoot: " . getProjectRoot() . "\n"; +if ($ENV{DOCUMENTPOOL}) +{ + if ( -d $ENV{DOCUMENTPOOL}) + { + print "overwrite default Documentpool: '$sDocumentPool'\n"; + print " with \$ENV{DOCUMENTPOOL}: $ENV{DOCUMENTPOOL}\n"; + $sDocumentPool = $ENV{DOCUMENTPOOL}; + } + else + { + print "Given \$DOCUMENTPOOL doesn't exist.\n"; + } +} + +my $err = 0; +my $nCompareTime = getTime(); + +# if we want to check one file, give -pool and -document +# if we want to check the whole pool, give -pool +# if we want to check all, call without parameters +if ($pool) +{ + if ($document) + { + $err = SingleDocumentCompare( $sDocumentPool, + $pool, + $document, + $creatortype, + $prepareonly, + $show + ); + } + else + { + $err = CompareFiles($sDocumentPool, $pool); + } +} +else +{ + local *DIR; + if (opendir (DIR, $sDocumentPool)) # Directory oeffnen + { + my $myfile; + while ($myfile = readdir(DIR)) + { # ein filename holen + if ($myfile eq "." || + $myfile eq "..") + { + next; + } + my $sDocumentPath = appendPath($sDocumentPool, $myfile); + if ( -d $sDocumentPath ) + { + $err += CompareFiles($sDocumentPool, $myfile); + } + elsif ( -f $sDocumentPath ) + { + print "Warning: the file '$myfile' will not compared.\n"; + } + } + closedir(DIR); + } + # my $sPool = "eis-chart"; + # $err += CompareFiles($sDocumentPool, "eis-chart"); + # $err += CompareFiles($sDocumentPool, "eis-impress"); + # $err += CompareFiles($sDocumentPool, "eis-writer"); + # $err += CompareFiles($sDocumentPool, "eis-calc"); + +} + +printTime(endTime($nCompareTime)); +exit ($err); + +# ------------------------------------------------------------------------------ + +sub CompareFiles($$) +{ + my $sDocumentPath = shift; + my $sPool = shift; + my %aFailedHash; + my $startdir = appendPath($sDocumentPath, $sPool); + + local *DIR; + if (opendir (DIR, $startdir)) # Directory oeffnen + { + my $myfile; + while ($myfile = readdir(DIR)) + { # ein filename holen + if ($myfile eq "knownissues.xcl") + { + next; + } + my $sAbsoluteFile = appendPath($startdir, $myfile); + if (-f $sAbsoluteFile) + { + my $nIssue; + my $sIssueText; + ($nIssue, $sIssueText) = checkForKnownIssue($startdir, $myfile); + if ($nIssue == 0) + { + $err = SingleDocumentCompare( + # "/net/so-gfxcmp-documents.germany.sun.com/export/gfxcmp/document-pool", # $documentpoolpath, + $sDocumentPool, + $sPool, # $documentpool, + $myfile, # $documentname); + $creatortype, # $destinationcreatortype, + $prepareonly, + $show + ); + $aFailedHash{$myfile} = $err; + } + else + { + print "$myfile [KNOWN ISSUE: #$sIssueText#]\n"; + } + } + } + closedir(DIR); + } + + print "***** State for graphical compare of pool: '$sPool' ******\n"; + my $nErrorCount = 0; + my $file; + foreach $file (keys %aFailedHash) + { + if ($aFailedHash{$file} != 0) + { + print "Failed: $file\n"; + $nErrorCount++; + } + } + print "Whole unit: "; + if ($nErrorCount > 0) + { + print "PASSED.FAILED\n"; + } + else + { + print "PASSED.OK\n"; + } + print "************************************************************\n"; + return $nErrorCount; +} +# ------------------------------------------------------------------------------ +# return issue number if file exists in knownissues.xcl file +sub checkForKnownIssue($$) +{ + my $startdir = shift; + my $myfile = shift; + + if ($force) + { + return 0,""; + } + + my $sKnownIssueFile = appendPath($startdir, "knownissues.xcl"); + my $sIssueText = "unknown"; + local *ISSUES; + my $nIssue = 0; + my $sCurrentSection; + + if (open(ISSUES, $sKnownIssueFile)) + { + my $line; + while ($line = <ISSUES>) + { + chomp($line); + if ($line =~ /\[(.*)\]/ ) + { + $sCurrentSection = $1; + next; + } + if ($sCurrentSection eq $creatortype) + { + if ($line =~ /\#\#\# (.*) \#\#\#/ ) + { + $sIssueText = $1; + } + if ($line =~ /^${myfile}$/ ) + { + $nIssue = 1; + last; + } + } + } + close(ISSUES); + } + return $nIssue, $sIssueText; +} +# ------------------------------------------------------------------------------ +sub prepare() +{ + # directory structure: + # documents will be found in + # ../document-pool/eis-tests + + # references will be found in + # ../references/unxlngi/eis-tests + # ../references/wntmsci/eis-tests + + # output goes to + # ../unxlngi6.pro/misc + + if ($verbose) + { + setVerbose(); + } + + # TEST + if (!$ENV{INPATH}) + { + if ($OSNAME eq "linux") + { + # just for debug + setINPATH("unxlngi6.pro"); + } + } + else + { + setINPATH($ENV{INPATH}); + } + + if (! $creatortype) + { + $creatortype= "ps"; + } + + my $cwd = getcwd(); + print "Current Directory: $cwd\n" if ($verbose); + my $sProjectBase; + if ($ENV{PRJ}) + { + # print "cwd:=$cwd\n"; + # print "PRJ:=$ENV{PRJ}\n"; + $sProjectBase = appendPath($cwd, $ENV{PRJ}); + } + else + { + $sProjectBase = dirname($cwd); + } + if ($OSNAME eq "cygwin") + { + $sProjectBase = `cygpath -w $sProjectBase`; + chomp($sProjectBase); + $sProjectBase = unixpath($sProjectBase); + # print "cygwin patch \$sProjectBase := $sProjectBase\n"; + } + # print "Project base path: $sProjectBase\n"; + setProjectRoot($sProjectBase); + + + # TEST TEST TEST + # exit (0); +} +# ------------------------------------------------------------------------------ +sub print_usage(*) +{ + local *HANDLE = $_[0]; + my $tool_name = basename($0); + + print(HANDLE <<END_OF_USAGE); + +Usage: $tool_name [OPTIONS] + + -pool Give pool name out of document-pool directory. + But all documents list in knownissues.xcl will not check. + -document Give a single document to test, the known issue list will ignored. + -creatortype=s s:ps create postscript files via print to file. + s:pdf create PDF file via export to pdf. + -h, --help Print this help, then exit + -v, --version Print version number, then exit + +END_OF_USAGE +; +} diff --git a/testgraphical/source/cwstestresult.pl b/testgraphical/source/cwstestresult.pl new file mode 100644 index 000000000000..63c68c827dbd --- /dev/null +++ b/testgraphical/source/cwstestresult.pl @@ -0,0 +1,208 @@ +: +eval 'exec perl -wS $0 ${1+"$@"}' + if 0; + +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +# +# cwstestresult.pl - publish results of CWS tests to EIS +# + +use strict; +use Getopt::Long; +use Cwd; + +#### module lookup +my @lib_dirs; +BEGIN { + if ( !defined($ENV{SOLARENV}) ) { + die "No environment found (environment variable SOLARENV is undefined)"; + } + push(@lib_dirs, "$ENV{SOLARENV}/bin/modules"); + push(@lib_dirs, "$ENV{COMMON_ENV_TOOLS}/modules") if defined($ENV{COMMON_ENV_TOOLS}); +} +use lib (@lib_dirs); + +use Cws; + +#### global ##### +( my $script_name = $0 ) =~ s/^.*\b(\w+)\.pl$/$1/; + +my $is_debug = 1; # enable debug +my $opt_master; # option: master workspace +my $opt_child; # option: child workspace +my $opt_milestone; # option: milestone +my $opt_testrunName; # option: testrunName +my $opt_testrunPlatform; # option: testrunPlatfrom +my $opt_resultPage; # option: resultPage + + +#### main ##### + +my $arg_status= parse_options(); +testresult($arg_status); +exit(0); + +#### subroutines #### + +sub testresult +{ + my $status = shift; + # get master and child workspace + my $masterws = $opt_master ? uc($opt_master) : $ENV{WORK_STAMP}; + my $milestone = $opt_milestone ? $opt_milestone : $ENV{UPDMINOR}; + my $childws = $opt_milestone ? undef : ( $opt_child ? $opt_child : $ENV{CWS_WORK_STAMP} ); + + if ( !defined($masterws) ) { + print_error("Can't determine master workspace environment.\n" + . "Please initialize environment with setsolar ...", 1); + } + + if ( !defined($childws) && !defined($milestone) ) { + print_error("Can't determine child workspace environment or milestone.\n" + . "Please initialize environment with setsolar ...", 1); + } + if ( !defined($opt_resultPage) ) { + $opt_resultPage=""; + } + my $cws = Cws->new(); + if ( defined($childws) ) { + $cws->child($childws); + } + $cws->master($masterws); + my $eis = $cws->eis(); + + no strict; + my $result=''; + + if ( defined($childws) ) { + $opt_resultPage=SOAP::Data->type(string => $opt_resultPage); + my $id = $cws->eis_id(); + if ( is_valid_cws($cws) ) { + $result=$eis->submitTestResult($id,$opt_testrunName,$opt_testrunPlatform, $opt_resultPage, $status); + } else { + print STDERR "cws is not valid"; + } + } else { + $opt_resultPage=SOAP::Data->type(string => $opt_resultPage); + $result=$eis->submitTestResultMWS($masterws,$milestone,$opt_testrunName,$opt_testrunPlatform, $opt_resultPage, $status); + } + + exit(0) +} + + +sub is_valid_cws +{ + my $cws = shift; + + my $masterws = $cws->master(); + my $childws = $cws->child(); + # check if we got a valid child workspace + my $id = $cws->eis_id(); + if ( !$id ) { + print_error("Child workspace '$childws' for master workspace '$masterws' not found in EIS database.", 2); + } + return 1; +} + +sub parse_options +{ + # parse options and do some sanity checks + Getopt::Long::Configure("no_ignore_case"); + my $help = 0; + my $success = GetOptions('h' => \$help, + 'M=s' => \$opt_master, + 'm=s' => \$opt_milestone, + 'c=s' => \$opt_child, + 'n=s' => \$opt_testrunName, + 'p=s' => \$opt_testrunPlatform , + 'r=s' => \$opt_resultPage ); + if ( $help || !$success || $#ARGV < 0 || (!defined($opt_testrunName)) || ( !defined($opt_testrunPlatform)) ) { + usage(); + exit(1); + } + + print "$opt_master\n"; + print "$opt_milestone\n"; + print "$opt_child\n"; + print "$opt_testrunName\n"; + print "$opt_testrunPlatform\n"; + print "$opt_resultPage\n"; + + if ( defined($opt_milestone) && defined($opt_child) ) { + print_error("-m and -c are mutually exclusive options",1); + } + + return $ARGV[0]; +} + +# sub print_message +# { +# my $message = shift; +# +# print STDERR "$script_name: "; +# print STDERR "$message\n"; +# return; +# } + +sub print_error +{ + my $message = shift; + my $error_code = shift; + + print STDERR "$script_name: "; + print STDERR "ERROR: $message\n"; + + if ( $error_code ) { + print STDERR "\nFAILURE: $script_name aborted.\n"; + exit($error_code); + } + return; +} + +sub usage +{ + print STDERR "Usage: cwstestresult[-h] [-M masterws] [-m milestone|-c childws] <-n testrunName> <-p testrunPlatform> <-r resultPage> statusName\n"; + print STDERR "\n"; + print STDERR "Publish result of CWS- or milestone-test to EIS\n"; + print STDERR "\n"; + print STDERR "Options:\n"; + print STDERR "\t-h\t\t\thelp\n"; + print STDERR "\t-M master\t\toverride MWS specified in environment\n"; + print STDERR "\t-m milestone\t\toverride milestone specified in environment\n"; + print STDERR "\t-c child\t\toverride CWS specified in environment\n"; + print STDERR "\t-n testrunName\t\tspecifiy name of the test\n"; + print STDERR "\t-p testrunPlatform\tspecify platform where the test ran on\n"; + print STDERR "\t-r resultPage\t\tspecify name of attachment or hyperlink\n"; + print STDERR "\t\t\t\tfor resultPage\n"; + + + print STDERR "\nExample:\n"; + print STDERR "\tcwstestresult -c mycws -n Performance -p Windows -r PerfomanceTestWindows.html ok\n"; +} diff --git a/testgraphical/source/cwstestresulthelper.pm b/testgraphical/source/cwstestresulthelper.pm new file mode 100644 index 000000000000..37a5315445af --- /dev/null +++ b/testgraphical/source/cwstestresulthelper.pm @@ -0,0 +1,268 @@ +package cwstestresulthelper; + +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +use English; +use warnings; +use strict; +use Cwd; +use Cwd 'chdir'; + +use stringhelper; +use loghelper; +use oshelper; +use filehelper; +use CallExternals; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + # if using RCS/CVS, this may be preferred + $VERSION = do { my @r = (q$Revision: 1.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + @ISA = qw(Exporter); + @EXPORT = qw(&cwstestresult); + %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], + # your exported package globals go here, + # as well as any optionally exported functions + @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); +} + +sub cwstestresult($$$$$$) +{ + my $sStatus = shift; + my $sDBdistinct = shift; + my $sourceversion = shift; + my $destinationversion = shift; + + my $sSOLARENV; # = getSolenvPath(); + my $nSOLARENV_fake = 0; + my $sCOMMON_ENV_TOOLS; + my $nCOMMON_ENV_TOOLS_fake = 0; + + my $MAJOR; + my $MINOR; + # we need an extra state in DB + # if this state is given here, we need to add information in cws back. + if ( ! $sSOLARENV) + { + my @MAJORMINOR=split('_', $sourceversion); + if ($#MAJORMINOR < 1) + { + print "Failure with sourceversion '$sourceversion' not splitable.\n"; + return; + } + $MAJOR=$MAJORMINOR[0]; # DEV300, OOH310, ... + $MINOR=$MAJORMINOR[1]; # m45, ... + if (getEnvironment() eq "wntmsci") + { + $sSOLARENV="o:/$MAJOR/ooo.$MINOR/solenv"; + if (! -e $sSOLARENV) + { + # fallback to old before ause103 (treeconfig) + $sSOLARENV="o:/$MAJOR/src.$MINOR/solenv"; + } + } + elsif (getEnvironment() eq "unxlngi" || + getEnvironment() eq "unxsoli") + { + $sSOLARENV="/so/ws/$MAJOR/ooo.$MINOR/solenv"; + # automount + system("ls -al $sSOLARENV >/dev/null"); + sleep(1); + if (! -e $sSOLARENV) + { + # fallback to old before ause103 (treeconfig) + $sSOLARENV="/so/ws/$MAJOR/src.$MINOR/solenv"; + } + } + else + { + log_print("cwstestresult(): This environment is not supported."); + return; + } + } + if ( !defined($ENV{SOLARENV}) || length($ENV{SOLARENV}) == 0 ) + { + $ENV{SOLARENV} = $sSOLARENV; + log_print(" SOLARENV is: $ENV{SOLARENV} faked\n"); + $nSOLARENV_fake = 1; + } + if ( ! $sCOMMON_ENV_TOOLS) + { + if (isWindowsEnvironment()) + { + $sCOMMON_ENV_TOOLS="r:/etools"; + } + elsif (isUnixEnvironment() ) + { + $sCOMMON_ENV_TOOLS="/so/env/etools"; + # automount + system("ls -al $sCOMMON_ENV_TOOLS >/dev/null"); + sleep(1); + } + else + { + log_print("cwstestresult(): This environment is not supported. (variable COMMON_ENV_TOOLS not set.)"); + return; + } + } + if ( !defined($ENV{COMMON_ENV_TOOLS}) || length($ENV{COMMON_ENV_TOOLS}) == 0 ) + { + $ENV{COMMON_ENV_TOOLS} = $sCOMMON_ENV_TOOLS; + log_print( "COMMON_ENV_TOOLS is: $ENV{COMMON_ENV_TOOLS} faked\n"); + $nCOMMON_ENV_TOOLS_fake = 1; + } + + # if ( !defined($ENV{WORK_STAMP}) ) + # { + # $ENV{WORK_STAMP} = $MAJOR; + # log_print( " WORK_STAMP is: $ENV{WORK_STAMP} faked\n"); + # } + # if ( !defined($ENV{UPDMINOR}) ) + # { + # $ENV{UPDMINOR} = $MINOR; + # log_print( " UPDMINOR is: $ENV{UPDMINOR} faked\n"); + # } + + my $nWORK_STAMP_fake = 0; + my $nUPDMINOR_fake = 0; + + if ( !defined($ENV{WORK_STAMP}) || length($ENV{WORK_STAMP}) == 0 ) + { + $ENV{WORK_STAMP} = $MAJOR; + log_print(" WORK_STAMP is: $ENV{WORK_STAMP} faked\n"); + $nWORK_STAMP_fake = 1; + } + if ( !defined($ENV{UPDMINOR}) || length($ENV{WORK_STAMP}) == 0 ) + { + $ENV{UPDMINOR} = $MINOR; + log_print(" UPDMINOR is: $ENV{UPDMINOR} faked\n"); + $nUPDMINOR_fake = 1; + } + + # my $sStatus = "ok"; + # if ($nFailure == 0) + # { + # $sStatus = $sInfo; + # } + # elsif ($nFailure == 1) + # { + # $sStatus = "failed"; + # } + # elsif ($nFailure == 2) + # { + # $sStatus = "incomplete"; + # } + + # system("cwstestresult -c mycws -n Performance -p Windows ok"); + my $sPerlProgram = appendPath($sSOLARENV, "bin/cwstestresult.pl"); + # if ( -e "cwstestresult.pl" ) + # { + # # use a local version instead + # $sPerlProgram = "cwstestresult.pl"; + # } + # else + # { + # my $currentdir =cwd(); + # log_print( "We are in $currentdir\n"); + # } + + my $sPerlParam; + # $sPerlParam = " -m $MAJOR"; # master CWS + $sPerlParam .= " -c $destinationversion"; # name of CWS + $sPerlParam .= " -n ConvWatch"; # ConvWatch need to be capitalised for cwstestresult + my $sCWSEnv; + if (isWindowsEnvironment()) + { + $sCWSEnv = "Windows"; + } + elsif (getEnvironment() eq "unxlngi") + { + $sCWSEnv = "Linux"; + } + elsif (getEnvironment() eq "unxsoli") + { + $sCWSEnv = "SolarisX86"; + } + else + { + log_print("cwstestresult(): This environment is not supported. (getEnvironment() returns wrong value?)"); + return; + } + $sPerlParam .= " -p " . $sCWSEnv; + $sPerlParam .= " -r http://so-gfxcmp-lin.germany.sun.com/gfxcmp_ui/status_new.php?distinct=$sDBdistinct"; + + $sPerlParam .= " "; + $sPerlParam .= $sStatus; + + + # my $sSetcwsAndPerl = "setcws $destinationversion; " . getPerlExecutable(); + + my $err = callperl(getPerlExecutable(), $sPerlProgram, $sPerlParam); + if ($err != 0) + { + log_print( "Can't call cwstestresult.pl\n"); + } + if ($nSOLARENV_fake == 1) + { + $ENV{SOLARENV} = ""; + undef( $ENV{SOLARENV} ); + $nSOLARENV_fake = 0; + # if ( defined($ENV{SOLARENV}) ) + # { + # print "SOLARENV always defined.\n"; + # } + } + if ($nCOMMON_ENV_TOOLS_fake == 1) + { + $ENV{COMMON_ENV_TOOLS} = ""; + undef( $ENV{COMMON_ENV_TOOLS} ); + $nCOMMON_ENV_TOOLS_fake = 0; + } + + if ( $nWORK_STAMP_fake == 1 ) + { + # undef($ENV{WORK_STAMP}); + $ENV{WORK_STAMP} = ""; + undef($ENV{WORK_STAMP}); + $nWORK_STAMP_fake = 0; + } + if ( $nUPDMINOR_fake == 1 ) + { + $ENV{UPDMINOR} = ""; + undef($ENV{UPDMINOR}); + $nUPDMINOR_fake = 0; + } + + +} + + +1; diff --git a/testgraphical/source/dbhelper.pm b/testgraphical/source/dbhelper.pm new file mode 100644 index 000000000000..0f5c0d5bb5ea --- /dev/null +++ b/testgraphical/source/dbhelper.pm @@ -0,0 +1,209 @@ +# +# # ------------------------------------------------------------------------------ +# +# sub DB_INSERT_INTO_TABLE_STATUS() +# { +# # my $sDocID = shift; +# # my $sDBDistinct = shift; +# +# my $sHostname = hostname; +# +# my $sSQL = "INSERT INTO status (docid, dbdistinct2, hostname)"; +# $sSQL .= " VALUES ($docid, '$dbdistinct', '$sHostname')"; +# ExecSQL($sSQL); +# } +# sub DB_UPDATE_TABLE_STATUS_SET_INFO($) +# { +# # my $sDocID = shift; +# # my $sDBDistinct = shift; +# my $sInfo = shift; +# +# # my $sHostname = hostname; +# +# my $sInsertSQL = "UPDATE status SET info='$sInfo' WHERE docid=$docid AND dbdistinct2='$dbdistinct'"; +# ExecSQL($sInsertSQL); +# } +# +# sub DB_UPDATE_TABLE_DOCUMENTS_SET_STATE_INFO($$) +# { +# # my $sDocID = shift; +# my $sStatus = shift; +# my $sError = shift; +# +# my $sSQL = "UPDATE documents"; +# $sSQL .= " SET state='" . $sStatus . "'"; +# $sSQL .= ",info='" . $sError . "'"; +# $sSQL .= " WHERE docid=$docid"; +# ExecSQL($sSQL); +# } +# sub DB_UPDATE_TABLE_STATUS_SET_STATE($) +# { +# # my $sDocID = shift; +# my $sStatus = shift; +# +# my $sSQL = "UPDATE status"; +# $sSQL .= " SET state='" . $sStatus . "'"; +# $sSQL .= " WHERE docid=$docid"; +# ExecSQL($sSQL); +# } +# +# # sub DB_UPDATE_TABLE_STATUS_SET_STATE_FAILED() +# # { +# # DB_UPDATE_TABLE_STATUS_SET_STATE("FAILED-FAILED"); +# # } +# # ------------------------------------------------------------------------------ +# # sub getDBConnectionString() +# # { +# # # return "server:jakobus,db:jobs_convwatch,user:admin,passwd:admin"; +# # return "server:unoapi,db:jobs_convwatch,user:convwatch,passwd:convwatch"; +# # } +# # ------------------------------------------------------------------------------ +# sub getSourceInfo($) +# { +# my $sDBStr = shift; +# +# my $sSourceVersion; +# if ( $sDBStr =~ / sourceversion='(.*?)',/ ) +# { +# $sSourceVersion = $1; +# log_print( "sSourceVersion: $sSourceVersion\n"); +# } +# if (! $sSourceVersion) +# { +# log_print( "Error: no value for sourceversion found.\n"); +# return; +# } +# my $sSourceName; +# if ( $sDBStr =~ / sourcename='(.*?)',/ ) +# { +# $sSourceName = $1; +# log_print( "sSourceName: $sSourceName\n"); +# } +# my $sSourceCreatorType; +# if ( $sDBStr =~ / sourcecreatortype='(.*?)',/ ) +# { +# $sSourceCreatorType = $1; +# log_print( "sSourceCreatorType: $sSourceCreatorType\n"); +# } +# return $sSourceVersion, $sSourceName, $sSourceCreatorType; +# } +# # ------------------------------------------------------------------------------ +# sub getDestinationInfo($) +# { +# my $sDBStr = shift; +# +# my $sDestinationVersion; +# if ( $sDBStr =~ / destinationversion='(.*?)',/ ) +# { +# $sDestinationVersion = $1; +# log_print( "sDestinationVersion: $sDestinationVersion\n"); +# } +# if (! $sDestinationVersion) +# { +# log_print( "Error: no value for destinationversion found.\n"); +# return; +# } +# my $sDestinationName; +# if ( $sDBStr =~ / destinationname='(.*?)',/ ) +# { +# $sDestinationName = $1; +# log_print( "sDestinationName: $sDestinationName\n"); +# } +# my $sDestinationCreatorType; +# if ( $sDBStr =~ / destinationcreatortype='(.*?)',/ ) +# { +# $sDestinationCreatorType = $1; +# log_print( "sDestinationCreatorType: $sDestinationCreatorType\n"); +# } +# return $sDestinationVersion, $sDestinationName, $sDestinationCreatorType; +# } +# # ------------------------------------------------------------------------------ +# # sub getMailAddress($) +# # { +# # my $sDBStr = shift; +# # my $sMailAddress = ""; +# # if ( $sDBStr =~ / mailfeedback='(.*?)',/ ) +# # { +# # $sMailAddress = $1; +# # log_print( "sMailAddress: $sMailAddress\n"); +# # } +# # return $sMailAddress; +# # } +# +# # sub getDocumentInfo($) +# # { +# # my $sDBStr = shift; +# # +# # my $sDocumentPoolPath; +# # if ( $sDBStr =~ / documentpoolpath='(.*?)',/ ) +# # { +# # $sDocumentPoolPath = $1; +# # log_print( "sDocumentPoolPath: $sDocumentPoolPath\n"); +# # } +# # if (! $sDocumentPoolPath) +# # { +# # log_print( "Error: no value for documentpoolpath found.\n"); +# # return; +# # } +# # my $sDocumentPool; +# # if ( $sDBStr =~ / documentpool='(.*?)',/ ) +# # { +# # $sDocumentPool = $1; +# # log_print( "sDocumentPool: $sDocumentPool\n"); +# # } +# # if (! $sDocumentPool) +# # { +# # log_print( "Error: no value for documentpool found.\n"); +# # return; +# # } +# # my $sDocumentName; +# # if ( $sDBStr =~ / name='(.*?)',/ ) +# # { +# # $sDocumentName = $1; +# # log_print( "sDocumentName: $sDocumentName\n"); +# # } +# # return $sDocumentPoolPath, $sDocumentPool, $sDocumentName; +# # } +# +# sub getDistinct($) +# { +# my $sDBStr = shift; +# my $sDBDistinct; +# if ( $sDBStr =~ / dbdistinct2='(\S*?)',/ ) +# { +# $sDBDistinct = $1; +# log_print( "dbdistinct2: $sDBDistinct\n"); +# } +# return $sDBDistinct; +# } +# +# sub getIDInfo($) +# { +# my $sDBStr = shift; +# # my $dbdistinct; +# +# my $sDBDistinct = getDistinct($sDBStr); +# # if ( $sDBStr =~ / dbdistinct2='(\S*?)',/ ) +# # { +# # $sDBDistinct = $1; +# # log_print( "dbdistinct2: $sDBDistinct\n"); +# # } +# if (! $sDBDistinct) +# { +# log_print( "Error: no dbdistinct given.\n"); +# return; +# } +# my $sDocID; +# if ( $sDBStr =~ / docid=(\S*?),/ ) +# { +# $sDocID = $1; +# log_print( "docid: $sDocID\n"); +# } +# if (! $sDocID) +# { +# log_print( "Error: no docid given.\n"); +# return; +# } +# return $sDBDistinct, $sDocID; +# } +# diff --git a/testgraphical/source/filehelper.pm b/testgraphical/source/filehelper.pm new file mode 100644 index 000000000000..ed1be35cf124 --- /dev/null +++ b/testgraphical/source/filehelper.pm @@ -0,0 +1,358 @@ +package filehelper; + +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +use strict; +use warnings; +use strict; +use English; # $OSNAME, ... +use stringhelper; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + # if using RCS/CVS, this may be preferred + $VERSION = do { my @r = (q$Revision: 1.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + @ISA = qw(Exporter); + @EXPORT = qw(&dospath &unixpath &appendPath &appendClass &setPrefix &getToolsPrefix &rmkdir &getJavaPathSeparator &getJavaFileDirSeparator &getFromPathes &convertCygwinPath); + %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], + # your exported package globals go here, + # as well as any optionally exported functions + @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); +} + + +# ------------------------------------------------------------------------------ +# helper, to change all file separators +sub dospath($) +{ + my $sPath = shift; + if ($OSNAME eq "MSWin32") + { + # make out of '/' a '\' + $sPath =~ s/\//\\/g; + } + else + { + } + return $sPath; +} + +sub unixpath($) +{ + my $sPath = shift; + if ($OSNAME ne "MSWin32") + { + # make out of '\' a '/' + $sPath =~ s/\\/\//g; + } + else + { + } + return $sPath; +} + +# ------------------------------------------------------------------------------ +# sub getGlobalInstSet() +# { +# my $sJumbo; +# if ($OSNAME eq "MSWin32") +# { +# # $sJumbo = "\\\\so-gfxcmp-lin\\jumbo_ship\\install"; +# $sJumbo = "\\\\jumbo.germany.sun.com\\ship\\install"; +# } +# elsif ($OSNAME eq "cygwin") +# { +# $sJumbo = "//jumbo.germany.sun.com/ship/install"; +# } +# else +# { +# $sJumbo = "/net/jumbo.germany.sun.com/ship/install"; +# } +# return $sJumbo; +# } + +# ------------------------------------------------------------------------------ +# sub getSolarisLockFile() +# { +# my $sSolarisLockFile = "/tmp/.ai.pkg.zone.lock-afdb66cf-1dd1-11b2-a049-000d560ddc3e"; +# return $sSolarisLockFile; +# } +# +# sub checkForSolarisLock() +# { +# if ($OSNAME eq "solaris") +# { +# # wait until the internal installer lock is gone +# while ( -e getSolarisLockFile() ) +# { +# while ( -e getSolarisLockFile() ) +# { +# log_print( "Warning: Wait active until installer lock is gone. \n"); +# sleep 1; +# } +# sleep 5; +# } +# log_print( "[ok], lock is gone.\n"); +# } +# } +# +# sub deleteSolarisLock() +# { +# if ($OSNAME eq "solaris") +# { +# sleep 1; +# unlink getSolarisLockFile(); +# +# sleep 1; +# if ( -e getSolarisLockFile() ) +# { +# # try delete the file as super user? +# `sudo rm -f getSolarisLockFile()`; +# sleep 1; +# } +# } +# } + +# ------------------------------------------------------------------------------ +sub appendPath($$) +{ + my $sPath = shift; + my $sAddPath = shift; + if ($sPath && $sAddPath) + { + if (! endswith($sPath, "/") && + ! endswith($sPath, "\\")) + { + # getJavaFileDirSeparator(); + $sPath .= "/"; + } + $sPath .= $sAddPath; + } + return $sPath; +} + +sub appendClass($$) +{ + my $sPath = shift; + my $sAddPath = shift; + + my $sSeparator = getJavaPathSeparator(); + if ($sPath && $sAddPath) + { + if (! endswith($sPath, $sSeparator)) + { + # getJavaFileDirSeparator(); + $sPath .= $sSeparator; + } + $sPath .= $sAddPath; + } + return $sPath; +} + +# ------------------------------------------------------------------------------ + +our $sPrefix; +sub setPrefix($) +{ + $sPrefix = shift; +} + +sub getPrefix() +{ + return $sPrefix; +} + +# ------------------------------------------------------------------------------ +our $programprefix; + +# sub getProgramPrefix($) +# { +# my $sDBDistinct = shift; +# +# my $sProgramPrefix; +# if (! $programprefix) +# { +# if ($OSNAME eq "MSWin32") +# { +# # $programprefix = "C:/gfxcmp/programs"; +# $programprefix = "C:"; +# if (getPrefix() eq "performance") +# { +# $programprefix = "D:"; +# } +# $programprefix = appendPath($programprefix, "gp"); +# } +# elsif ($OSNAME eq "linux") +# { +# $programprefix = "/space/" . getPrefix() . "/programs"; +# } +# elsif ($OSNAME eq "solaris") +# { +# $programprefix = "/space/" . getPrefix() . "/programs"; +# } +# else +# { +# print "Error: This environment isn't supported yet.\n"; +# exit(1); +# } +# } +# $sProgramPrefix = appendPath($programprefix, substr($sDBDistinct, 0, 19)); +# return $sProgramPrefix; +# } +# ------------------------------------------------------------------------------ +our $toolsprefix; + +sub getToolsPrefix() +{ + my $sToolsPrefix; + if (! $toolsprefix) + { + if ($OSNAME eq "MSWin32") + { + $toolsprefix = "C:"; + if (getPrefix() eq "performance") + { + $toolsprefix = "D:"; + } + } + elsif ($OSNAME eq "linux") + { + $toolsprefix = "/space"; + } + elsif ($OSNAME eq "solaris") + { + $toolsprefix = "/space"; + } + else + { + print "Error: This environment isn't supported yet.\n"; + exit(1); + } + $toolsprefix = appendPath($toolsprefix, getPrefix()); + $toolsprefix = appendPath($toolsprefix, "tools"); + } + $sToolsPrefix = $toolsprefix; + return $sToolsPrefix; +} + +# also Windows safe +sub rmkdir($) +{ + my($tpath) = shift; + my $dir; + my $accum = ""; + + my @dirs = split(/\//, $tpath); + if ( $#dirs eq 0 ) + { + @dirs = split("\\\\", $tpath); + } + + foreach $dir (@dirs) + { + $accum = "$accum$dir/"; + if($dir ne "") + { + if(! -d "$accum") + { + mkdir ($accum); + chmod (0777,$accum); + } + } + } +} + +# ------------------------------------------------------------------------------ +sub getJavaPathSeparator() +{ + my $ps = ":"; + if ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") + { + $ps = ";"; + } + return $ps; +} +# ------------------------------------------------------------------------------ +sub getJavaFileDirSeparator() +{ + my $sfs = "/"; + if ($OSNAME eq "MSWin32") + { + $sfs = "\\"; + } + return $sfs; +} +# ------------------------------------------------------------------------------ +sub getFromPathes($$) +{ + my $sPathesIni = shift; + my $searchvalue = shift; + my $sResult; + if ( -e $sPathesIni) + { + local *PATHES; + if (open(PATHES, "$sPathesIni")) + { + my $line; + while ($line = <PATHES>) + { + chomp($line); + if ($line =~ /^$searchvalue=(.*)$/) + { + $sResult = $1; + } + } + close(PATHES); + } + } + return $sResult; +} + +sub convertCygwinPath($) +{ + my $sPath = shift; + + if ($OSNAME eq "cygwin") + { + # print "Cygwin Path Patch.\n" if ($verbose); + if ($sPath =~ /\/cygdrive\/(.)/) + { + my $Letter = $1; + $sPath =~ s/\/cygdrive\/${Letter}/${Letter}\:/; + # print "Cygwin Path Patch: '$sPath'\n" if ($verbose); + } + } + return $sPath; +} + + + +1; diff --git a/testgraphical/source/fill_documents_loop.pl b/testgraphical/source/fill_documents_loop.pl new file mode 100644 index 000000000000..c1b8174fefe5 --- /dev/null +++ b/testgraphical/source/fill_documents_loop.pl @@ -0,0 +1,423 @@ +eval 'exec perl -wS $0 ${1+\"$@\"}' + if 0; + +# This program has to start for the new convwatch, +# once on Windows environment and once on Linux environment +# Solaris is handled by the linux also. +# +# This program polls the database (documentcompare) every 60s for new jobs +# it runs over the given directory from documentpoolpath and pool, and create for every file +# a new database entry in documents. +# + +BEGIN +{ + # Adding the path of this script file to the include path in the hope + # that all used modules can be found in it. + $0 =~ /^(.*)[\/\\]/; + push @INC, $1; +} + +use ConvwatchHelper; +use CallExternals; +use stringhelper; +use filehelper; +use oshelper; +use timehelper; +use cwstestresulthelper; + +use strict; +use Cwd; +use File::Basename; +use English; # $OSNAME, ... +use Getopt::Long; +use File::Path; +use Cwd 'chdir'; + +my $cwd = getcwd(); + +our $help; # Help option flag +our $version; # Version option flag +our $test; + +our $version_info = 'convwatch.pl $Revision: 1.24 $ '; + +our $SOLARENV; +our $COMMON_ENV_TOOLS; + + +our $documentpoolname; +our $documentpoolpath; +our $dbdistinct; +our $sParentDistinct; +our $sCurrentDocumentPool; + +our $fs; +our @aEntries; + +# Prototypes +# sub getJavaFileDirSeparator(); +sub readdirectory($$$); +sub putDocumentInDB($$$); + +# flush STDOUT +my $old_handle = select (STDOUT); # "select" STDOUT and save # previously selected handle +$| = 1; # perform flush after each write to STDOUT +select ($old_handle); # restore previously selected handle + +setPrefix("gfxcmp"); + +if (!GetOptions( + "test" => \$test, + "help" => \$help, + "version" => \$version + )) +{ + print_usage(*STDERR); + exit(1); +} +if ($help) +{ + print_usage(*STDOUT); + exit(0); +} +# Check for version option +if ($version) +{ + print STDERR "$version_info\n"; + exit(0); +} + +# ------------------------------------------------------------------------------ +# within mysql it is better to use only '/' +$fs = "/"; # getJavaFileDirSeparator(); +# ------------------------------------------------------------------------------ +sub readdirectory($$$) +{ + my $startdir = shift; + my $sValues = shift; + my $hook = shift; + + my $myfile; + + local *DIR; + chdir $startdir; + cwd(); + if (! endswith($startdir, $fs)) + { + $startdir .= $fs; + } + + my $nCountFiles = 0; + if (opendir (DIR, $startdir)) # Directory oeffnen + { + while ($myfile = readdir(DIR)) + { # ein filename holen + #if (! -l $myfile) # not a link + #{ + if (-d $myfile ) # is a directory + { + if ( -l $myfile) + { + next; + } + if ($myfile ne "." && $myfile ne "..") + { + my $sNewStartDir = $startdir . $myfile ."/"; # neuen Directorystring erstellen + if ($sNewStartDir =~ "^\/proc" || + $sNewStartDir =~ "^\/dev" || + $sNewStartDir =~ "^\/udev" || + $sNewStartDir =~ "lost+found" ) + { + next; + } + # my $sNewDestDir = $destdir . $myfile ."/"; + # do a recursive call + # $nCountFiles++; + my $nFileCount = readdirectory($sNewStartDir, $sValues, $hook); + # workOnDir($sNewDir, $nFileCount); + $nCountFiles += $nFileCount; + + chdir ($startdir); # zurueckwechseln. + cwd(); + } + } + else + { + # File must exist, be a regular file and must not be the $onlyOnFile + if (-f $myfile) + { + # print " $startdir" . "$myfile\n"; + $nCountFiles++; + # workOnFile($startdir, $myfile, $destdir); + $hook->($startdir, $myfile, $sValues); + } + } + #} + #else + #{ + # print "linked file: $dir/$myfile\n"; + #} + } + closedir(DIR); + } + else + { + print "could not open $startdir\n"; + } + return $nCountFiles; +} +# ------------------------------------------------------------------------------ +sub putDocumentInDB($$$) +{ + my $currentDir = shift; + my $currentFile = shift; + my $sValues = shift; + + my $sSourceFilename = $currentDir . $currentFile; + # we cut down all the previous names like documentpoolpath and the documentpoolname + $sSourceFilename = substr($sSourceFilename, length($sCurrentDocumentPool . $fs)); + + my $sSQL = "INSERT INTO documents (dbdistinct2, name, pagecount, priority, parentdistinct) VALUES"; + $sSQL .= "('" . $dbdistinct . "', '" . $sSourceFilename . "', 0, 1, '". $sParentDistinct . "')"; + # print $sSQL . "\n"; + + push(@aEntries, $sSQL); + # ExecSQL($sSQL); +} + +# ------------------------------------------------------------------------------ +sub createDBEntriesForEveryDocument($) +{ + my $sStr = shift; + if ($sStr =~ /^MySQL-Error/ ) + { + # we don't do anything if an error occured + return; + } + + # interpret the follows string + # documentpoolpath='//so-gfxcmp-documents/doc-pool', documentpool='demo_lla', dbdistinct=62, + + # my $sDocumentPoolDir; + if ( $sStr =~ /documentpoolpath='(.*?)',/ ) + { + $documentpoolpath = $1; + } + if (! $documentpoolpath) + { + print "Error: no value for documentpoolpath found.\n"; + return; + } + + # my $sDocumentPool; + if ( $sStr =~ /documentpool='(.*?)',/ ) + { + $documentpoolname = $1; + } + if (! $documentpoolname) + { + print "Error: no value for documentpool found.\n"; + return; + } + # my $dbdistinct; + if ( $sStr =~ /dbdistinct2='(\S*?)',/ ) + { + $dbdistinct = $1; + } + if (! $dbdistinct) + { + print "Error: no dbdistinct given.\n"; + return; + } + + if (! -d $documentpoolpath ) + { + my $sEnv = getEnvironment(); + if ( isUnixEnvironment() ) + { + $documentpoolpath = "/net/so-gfxcmp-documents" . $documentpoolpath; + } + if ( -d $documentpoolpath ) + { + print "Warning: given documentpoolpath seems to be local, fix to '$documentpoolpath'\n"; + my $sSQL = "UPDATE documentcompare SET documentpoolpath='$documentpoolpath' WHERE dbdistinct2='$dbdistinct'"; + print "$sSQL\n"; + ExecSQL($sSQL); + } + else + { + print "Error: documentpoolpath '$documentpoolpath' not found. Don't insert anything.\n"; + my $sSQL = "UPDATE documentcompare SET state='failed',info='documentpoolpath not found.' WHERE dbdistinct2='$dbdistinct'"; + print "$sSQL\n"; + ExecSQL($sSQL); + return; + } + } + # create the documentpool directory, to run through + $sCurrentDocumentPool = $documentpoolpath; + if (! endswith($sCurrentDocumentPool, $fs)) + { + $sCurrentDocumentPool .= $fs; + } + $sCurrentDocumentPool .= $documentpoolname; + + if ( -d $sCurrentDocumentPool ) + { + if ( $sStr =~ /parentdistinct='(.*?)',/ ) + { + $sParentDistinct = $1; + } + else + { + $sParentDistinct = ""; + } + + # remove any doubles, if any + my $sSQL = "DELETE FROM documents WHERE dbdistinct2='$dbdistinct'"; + print "$sSQL\n"; + ExecSQL($sSQL); + + # run over the whole given document pool and store every found document name in the database + readdirectory($sCurrentDocumentPool, "", \&putDocumentInDB); + + chdir $cwd; + cwd(); + + foreach $sSQL (@aEntries) + { + # print "# $sSQL\n"; + print "$sSQL\n"; + ExecSQL($sSQL); + } + + my $sSQL = "UPDATE documentcompare SET state='inprogress' WHERE dbdistinct2='$dbdistinct'"; + print "$sSQL\n"; + ExecSQL($sSQL); + print "----------------------------------------------------------------------\n"; + $sParentDistinct = ""; + @aEntries = (); + } + else + { + print "Error: Given document pool '$sCurrentDocumentPool' doesn't exists.\n"; + my $sSQL = "UPDATE documentcompare SET state='cancelled' WHERE dbdistinct2='$dbdistinct'"; + ExecSQL($sSQL); + return; + } + # Send Mail, due to startconvwatch now + sendMail($sStr, $documentpoolname, $dbdistinct); +} + +# ------------------------------------------------------------------------------ +sub sendMail($$$) +{ + my $sStr = shift; + my $documentpool = shift; + my $dbdistinct = shift; + my $sourceversion; + if ( $sStr =~ /sourceversion='(.*?)',/ ) + { + $sourceversion = $1; + } + if (! $sourceversion) + { + print "Warning: no value for sourceversion found.\n"; + return; + } + my $destinationversion; + if ( $sStr =~ /destinationversion='(.*?)',/ ) + { + $destinationversion = $1; + } + if (! $destinationversion) + { + print "Warning: no value for destinationversion found.\n"; + return; + } + my $mailaddress; + if ( $sStr =~ /mailfeedback='(.*?)',/ ) + { + $mailaddress = $1; + } + if (! $mailaddress) + { + print "Warning: no value for mailfeedback found.\n"; + return; + } + + # state is 'inprogress', so send a mail + # my $sMailAddress = getMailAddress($sDoneStr); + my $sParams = "$sourceversion"; + $sParams .= " $destinationversion"; + $sParams .= " $documentpool"; + $sParams .= " $dbdistinct"; + $sParams .= " $mailaddress"; + $sParams .= " starts"; # run through state of convwatch + + my $sMailProgram = appendPath(getQADEVToolsPath(), "mailsend.php"); + + my $err; + my @lines; + my $sLine; + ($err, @lines) = callphp(getPHPExecutable(), $sMailProgram, $sParams); + foreach $sLine (@lines) + { + log_print( "Mail: $sLine\n"); + } + + if ($documentpool eq "EIS-tests") + { + cwstestresult("running", $dbdistinct, $sourceversion, $destinationversion, $SOLARENV, $COMMON_ENV_TOOLS); + } +} +# ------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ + +my $sEnvironmentCondition; +if (isWindowsEnvironment()) +{ + $sEnvironmentCondition = "environment='" . getEnvironment() . "'"; +} +elsif (isUnixEnvironment()) +{ + # $sEnvironmentCondition = " ( environment='unxlngi' OR environment='unxsoli' ) "; + $sEnvironmentCondition = " environment='" . getEnvironment() . "'"; +} +else +{ + print "Error: wrong environment.\n"; + exit(1); +} +my $sWhereClause = "WHERE "; +if ($sEnvironmentCondition) +{ + $sWhereClause .= $sEnvironmentCondition . " AND "; +} +$sWhereClause .= " state='new'"; + +setToolsPath(getQADEVToolsPath()); + +# ---------------------------------- main loop ---------------------------------- +while (1) +{ + my @aResult; + my $sSQL = "SELECT documentpoolpath,documentpool,dbdistinct2,sourceversion,destinationversion,mailfeedback,parentdistinct FROM documentcompare $sWhereClause"; + @aResult = ExecSQL($sSQL); + + my $aValue; + foreach $aValue (@aResult) + { + # print "# $nValue\n"; + createDBEntriesForEveryDocument($aValue); + } + if ($test) + { + last; + } + + # wait 30sec. + # wait30seconds(); + waitAMinute(); + checkForStop("stop_fill_documents_loop"); +} diff --git a/testgraphical/source/graphical_compare.pm b/testgraphical/source/graphical_compare.pm new file mode 100644 index 000000000000..5cde8d64ea01 --- /dev/null +++ b/testgraphical/source/graphical_compare.pm @@ -0,0 +1,586 @@ +package graphical_compare; + +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +use CallExternals; +use stringhelper; +use timehelper; +use filehelper; +use loghelper; +use oshelper; +use cwstestresulthelper; +use solarenvhelper; +use ConvwatchHelper; + +use strict; +use Cwd; +# use File::Basename; +use Getopt::Long; +use English; # $OSNAME, ... +use File::Path; +use Cwd 'chdir'; +use Sys::Hostname; +use Time::localtime; + +# my $cwd = getcwd(); + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + # if using RCS/CVS, this may be preferred + $VERSION = do { my @r = (q$Revision: 1.2 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + @ISA = qw(Exporter); + @EXPORT = qw(&SingleDocumentCompare &setPrefix &setConnectionString); + %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], + # your exported package globals go here, + # as well as any optionally exported functions + @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); +} + + +our $nTimeOut = 300 * 1000; +our $viewable = 1; +our $port; +our $resolution; +our $overwritereference; +our $fixreference; +our $sConncectionString; + +sub setConnectionString($) +{ + $sConncectionString=shift; +} + +sub getOOoRunnerClasspath() +{ + my $sSourceRoot; + my $sUPDExtensions = ""; + if (defined ($ENV{SOL_TMP}) && defined ($ENV{SOLARVERSION})) + { + $sSourceRoot = $ENV{SOLARVERSION}; + } + elsif (defined $ENV{SOURCE_ROOT}) + { + $sSourceRoot = $ENV{SOURCE_ROOT}; + $sSourceRoot = appendPath($sSourceRoot, $ENV{WORK_STAMP}); + } + else + { + $sSourceRoot = $ENV{SOLARVERSION}; + $sUPDExtensions = ".$ENV{UPDMINOR}"; + } + $sSourceRoot = appendPath($sSourceRoot, $ENV{INPATH}); + my $sSourceRootBin = appendPath($sSourceRoot, "bin" . $sUPDExtensions); + my $sSourceRootLib = appendPath($sSourceRoot, "lib" . $sUPDExtensions); + + if (! -d $sSourceRoot ) + { + log_print( "SourceRoot not found, search it in '$sSourceRoot'\n"); + return ""; + } + + my $sOOoRunnerPath = $sSourceRootBin; + my $sUnoilPath = $sSourceRootBin; + my $sRidlPath = $sSourceRootBin; + my $sJurtPath = $sSourceRootBin; + my $sJuhPath = $sSourceRootBin; + my $sJavaUnoPath = $sSourceRootBin; + + my $sOOoRunnerClasspath = + appendPath( $sRidlPath, "ridl.jar") . getJavaPathSeparator() . + appendPath( $sUnoilPath, "unoil.jar") . getJavaPathSeparator() . + appendPath( $sJurtPath, "jurt.jar") . getJavaPathSeparator() . + appendPath( $sJuhPath, "juh.jar") . getJavaPathSeparator() . + appendPath( $sJavaUnoPath, "java_uno.jar") . getJavaPathSeparator() . + appendPath( $sOOoRunnerPath, "OOoRunnerLight.jar"); + if (isWindowsEnvironment()) + { + $sOOoRunnerClasspath .= getJavaPathSeparator() . $sSourceRootBin; + } + else + { + $sOOoRunnerClasspath .= getJavaPathSeparator() . $sSourceRootLib; + } + return $sOOoRunnerClasspath; +} + +# ------------------------------------------------------------------------------ +sub getTempPath() +{ + my $sTempPath; + if (isWindowsEnvironment()) + { + $sTempPath = "C:/temp"; + } + elsif (isUnixEnvironment()) + { + $sTempPath = "/tmp"; + } + else + { + die "getTempPath() Failed, due to unsupported environment.\n"; + } + return $sTempPath; +} +# ------------------------------------------------------------------------------ + +sub getProjectOutput() +{ + my $sOutput = appendPath(getProjectRoot(), $ENV{INPATH}); + $sOutput = appendPath($sOutput, "misc"); + return $sOutput; +} + +# ------------------------------------------------------------------------------ +sub getProjectOutputReference() +{ + my $sOutput = appendPath(getProjectRoot(), $ENV{INPATH}); + $sOutput = appendPath($sOutput, "reference"); + return $sOutput; +} + + +sub searchForReference($) +{ + my $sFile = shift; + if ( -e $sFile ) + { + return 0; + } + if ( -e $sFile . ".ps") + { + return 0; + } + if ( -e $sFile . ".pdf") + { + return 0; + } + return 1; +} +# ------------------------------------------------------------------------------ + +# my $sOfficeName = $officeprefixname . $officename; +sub SingleDocumentCompare($$$$$$) +{ + # get all about the document to compare + my $sDocumentPoolPath = shift; + my $sDocumentPool = shift; + my $sDocumentName = shift; + my $sDebug = ""; + + # get all about the destination office + my $sCreatorType = shift; + if (! $sCreatorType) + { + # log_print( "parameter -creatortype not given. Use 'OOo'\n"); + $sCreatorType = "ps"; + } + my $prepareonly = shift; + my $show = shift; + + # my $nSimpleCompareTime = getTime(); + + my $nConvwatchFailed = 0; + set_logfile( appendPath(getProjectOutput(), $sDocumentName . ".txt" )); + + print("$sDocumentName"); + log_print("\n"); + log_print("Graphical compare on document: '$sDocumentName'\n"); + # ------------------------------------------------------------------------------ + # create postscript or pdf from first installed office + # ------------------------------------------------------------------------------ + + my $sOOoRunnerClasspath = quoteIfNeed(getOOoRunnerClasspath()); + if ($OSNAME eq "cygwin") + { + if (!startswith($sOOoRunnerClasspath, "\"")) + { + $sOOoRunnerClasspath = quote($sOOoRunnerClasspath); + } + } + if (length($sOOoRunnerClasspath) == 0) + { + $nConvwatchFailed == 1; + } + # ------------------------------------------------------------------------------ + # create postscript or pdf from second installed office + # ------------------------------------------------------------------------------ + + my $sPathesIni = appendPath(getProjectOutput(), "pathes.ini"); + my $gspath = getFromPathes($sPathesIni, "gs.path"); + my $gsexe = getFromPathes($sPathesIni, "gs.exe"); + my $impath = getFromPathes($sPathesIni, "imagemagick.path"); + my $javaexe = getFromPathes($sPathesIni, "java.exe"); + setJavaExecutable($javaexe); + + log_print("----- CREATE POSTSCRIPT OR PDF WITH RUNNING OFFICE -----\n"); + # my $nPrepareSecondPostscriptTime = getTime(); + if ($nConvwatchFailed == 0) + { + my $sInputPath = $sDocumentPoolPath; + $sInputPath = appendPath($sInputPath, $sDocumentPool); + $sInputPath = appendPath($sInputPath, $sDocumentName); + + if (! -f $sInputPath ) + { + $nConvwatchFailed = 1; + log_print("ERROR: File '$sInputPath' doesn't exists.\n"); + } + else + { + my $sOutputPath = getProjectOutput(); + my $sPropertyFile = appendPath(getProjectOutput() , $sDocumentName . ".build.props"); + + local *PROPERTYFILE; + if (open(PROPERTYFILE, ">$sPropertyFile")) + { + print PROPERTYFILE "# This file is automatically created by graphical_compare.pl\n"; + print PROPERTYFILE "DOC_COMPARATOR_PRINT_MAX_PAGE=9999\n"; + print PROPERTYFILE "DOC_COMPARATOR_GFX_OUTPUT_DPI_RESOLUTION=180\n"; + print PROPERTYFILE "DOC_COMPARATOR_REFERENCE_CREATOR_TYPE=$sCreatorType\n"; + print PROPERTYFILE "TEMPPATH=" . getTempPath() . "\n"; + if ($sConncectionString) + { + print PROPERTYFILE "ConnectionString=$sConncectionString\n"; + } + else + { + print PROPERTYFILE "ConnectionString=pipe,name=" . getUsername() . "\n"; + } + print PROPERTYFILE "OFFICE_VIEWABLE=true\n"; + print PROPERTYFILE "CREATE_DEFAULT_REFERENCE=true\n"; + print PROPERTYFILE "DOC_COMPARATOR_INPUT_PATH=$sInputPath\n"; + print PROPERTYFILE "DOC_COMPARATOR_OUTPUT_PATH=$sOutputPath\n"; + if (isWindowsEnvironment()) + { + print PROPERTYFILE "DOC_COMPARATOR_PRINTER_NAME=CrossOffice Generic Printer\n"; + } + print PROPERTYFILE "NoOffice=true\n"; + + close(PROPERTYFILE); + } + else + { + print "Can't open '$sPropertyFile' for write.\n"; + } + if ( -e "$sPropertyFile") + { + # start OOoRunner + # sleep 10; + # $sOOoRunnerClasspathFromDestinationName = quoteIfNeed(getOOoRunnerClasspath()); + my $sParams; + if ( $ENV{PERL} ) + { + $sParams = "-Dperl.exe=" . convertCygwinPath($ENV{PERL}); + } + + $sParams .= " -cp " . $sOOoRunnerClasspath . + " org.openoffice.Runner" . + " -TimeOut $nTimeOut" . + " -tb java_complex" . + " -ini $sPropertyFile" . + " -o graphical.PostscriptCreator"; + # $sParams .= " -cs pipe,name=$USER"; + + # $sDebug = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9001,suspend=y"; + my $err = calljava(getJavaExecutable(), $sParams, $sDebug); + $sDebug = ""; + log_print( "\n\n"); + if ($err != 0) + { + my $sFailure = "Failed after try to create Postscript/pdf document for " . $sDocumentName; + log_print("ERROR: $sFailure\n"); + $nConvwatchFailed = 1; + } + } + else + { + my $sFailure = "There is no propertyfile: $sPropertyFile"; + log_print( "ERROR: $sFailure\n"); + $nConvwatchFailed=1; + } + } + + # set prepareonly and it is possible to only create ps or pdf files + if ($prepareonly) + { + print(" [only create "); + if ($sCreatorType eq "ps" || $sCreatorType eq "pdf") + { + print(" $sCreatorType"); + } + else + { + print(" (${sCreatorType}?)"); + } + if ($nConvwatchFailed == 0) + { + print(" ok"); + } + else + { + print(" failed") + } + print("]\n"); + return $nConvwatchFailed; + } + + + # ------------------------------------------------------------------------------ + # create jpeg from postscript or pdf from second installed office + # ------------------------------------------------------------------------------ + + if ($nConvwatchFailed == 0) + { + log_print("----- CREATE JPEG FROM POSTSCRIPT OR PDF FROM RUNNING OFFICE -----\n"); + # start OOoRunner + my $sInputPath = getProjectOutput(); + $sInputPath = appendPath($sInputPath, $sDocumentName); + + my $sOutputPath = getProjectOutput(); + + my $sParams = "-cp " . $sOOoRunnerClasspath . + " org.openoffice.Runner" . + " -TimeOut $nTimeOut" . + " -tb java_complex" . + " -DOC_COMPARATOR_INPUT_PATH " . quoteIfNeed($sInputPath) . + " -DOC_COMPARATOR_OUTPUT_PATH " . quoteIfNeed($sOutputPath) . + " -DOC_COMPARATOR_REFERENCE_CREATOR_TYPE $sCreatorType" . + " -NoOffice" . + " -NoSmallPictures" . + " -o graphical.JPEGCreator"; + if ($gspath) + { + $sParams .= " -gs.path " . quoteIfNeed($gspath); + } + if ($gsexe) + { + $sParams .= " -gs.exe $gsexe"; + } + + # $sDebug = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9001,suspend=y"; + my $err = calljava(getJavaExecutable(), $sParams, $sDebug); + $sDebug = ""; + # log_print( "\n\n"); + if ($err != 0) + { + my $sFailure = "Failed after try to create JPEG from Postscript/pdf document for " . $sDocumentName; + log_print("ERROR: $sFailure\n"); + $nConvwatchFailed = 1; + } + } + } + + # ------------------------------------------------------------------------------ + # create jpeg from postscript or pdf from references + # ------------------------------------------------------------------------------ + + if ($nConvwatchFailed == 0) + { + log_print("----- CREATE JPEG FROM POSTSCRIPT OR PDF FROM REFERENCE -----\n"); + + # start OOoRunner + my $sInputPath = appendPath(getProjectRoot(), "references"); + $sInputPath = appendPath($sInputPath, getEnvironment()); + $sInputPath = appendPath($sInputPath, $sDocumentPool); + $sInputPath = appendPath($sInputPath, $sDocumentName); + + my $err = searchForReference($sInputPath); + if ($err != 0) + { + log_print("ERROR: Can't find Postscript or PDF reference for '$sInputPath'\n"); + $nConvwatchFailed = 1; + } + else + { + my $sOutputPath = getProjectOutputReference(); + rmkdir $sOutputPath; + + my $sIndexFile = appendPath($sOutputPath, "index.ini"); + # we need the index.ini for better run through + local *INDEXINI; + if ( ! -e $sIndexFile) + { + if (open(INDEXINI, ">$sIndexFile")) + { + # print INDEXINI "[$sDocumentName]\n"; + close(INDEXINI); + } + } + my $sParams = "-cp " . $sOOoRunnerClasspath . + " org.openoffice.Runner" . + " -TimeOut $nTimeOut" . + " -tb java_complex" . + " -DOC_COMPARATOR_INPUT_PATH " . quoteIfNeed($sInputPath) . + " -DOC_COMPARATOR_OUTPUT_PATH " . quoteIfNeed($sOutputPath) . + " -DOC_COMPARATOR_REFERENCE_CREATOR_TYPE $sCreatorType" . + " -NoOffice" . + " -NoSmallPictures" . + " -o graphical.JPEGCreator"; + if ($gspath) + { + $sParams .= " -gs.path " . quoteIfNeed($gspath); + } + if ($gsexe) + { + $sParams .= " -gs.exe $gsexe"; + } + + # $sDebug = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9001,suspend=y"; + my $err = calljava(getJavaExecutable(), $sParams, $sDebug); + $sDebug = ""; + # log_print( "\n\n"); + if ($err != 0) + { + my $sFailure = "Failed after try to create JPEG from Postscript/pdf document for references."; + log_print("ERROR: $sFailure\n"); + $nConvwatchFailed = 1; + } + } + } + # ------------------------------------------------------------------------------ + # compare JPEGs + # ------------------------------------------------------------------------------ + + if ($nConvwatchFailed == 0) + { + log_print("----- COMPARE JPEGS -----\n"); + my $sInputPath = appendPath(getProjectOutputReference(), $sDocumentName); + + my $sOutputPath = getProjectOutput(); + + my $sParams = "-Xmx512m" . + " -cp " . $sOOoRunnerClasspath . + " org.openoffice.Runner" . + " -TimeOut $nTimeOut" . + " -tb java_complex" . + " -DOC_COMPARATOR_INPUT_PATH " . quoteIfNeed($sInputPath) . + " -DOC_COMPARATOR_OUTPUT_PATH " . quoteIfNeed($sOutputPath) . + " -NoOffice" . + " -NoSmallPictures" . + " -o graphical.JPEGComparator"; + if ($impath) + { + $sParams .= " -imagemagick.path " . quoteIfNeed($impath); + } + + # start OOoRunner + # $sDebug = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9001,suspend=y"; + my $err = calljava(getJavaExecutable(), $sParams, $sDebug); + $sDebug = ""; + log_print( "\n\n"); + if ($err != 0) + { + my $sFailure = "Failed after compare JPEGs $sDocumentName\n"; + log_print("ERROR: $sFailure\n"); + $nConvwatchFailed = 1; + + if ($show) + { + # try to execute new java tool to show graphical compare + my $sJavaProgram = appendPath(getProjectRoot(), $ENV{INPATH}); + $sJavaProgram = appendPath($sJavaProgram, "class"); + $sJavaProgram = appendPath($sJavaProgram, "ConvwatchGUIProject.jar"); + if ( -e "$sJavaProgram") + { + my $sInputPath = appendPath(getProjectOutput(), $sDocumentName . ".ps.ini"); + if (! -e $sInputPath) + { + $sInputPath = appendPath(getProjectOutput(), $sDocumentName . ".pdf.ini"); + if (! -e $sInputPath) + { + $sInputPath = 0; + } + } + if ($sInputPath) + { + my $sParams = "-Xms128m -Xmx512m -jar $sJavaProgram $sInputPath"; + # $sParams .= " -cs pipe,name=$USER"; + # my $sJavaExe = "C:/Program Files/Java/jdk1.6.0_16/bin/java.exe"; # getJavaExecutable() + my $sJavaExe = getJavaExecutable(); + # $sDebug = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9001,suspend=y"; + my $err = calljava($sJavaExe, $sParams, $sDebug); + # $sDebug = ""; + # log_print( "\n\n"); + # if ($err != 0) + # { + # my $sFailure = "Failed after try to create Postscript/pdf document for " . $sDocumentName; + # log_print("ERROR: $sFailure\n"); + # $nConvwatchFailed = 1; + # } + } + } + else + { + print "WARNING: The show program '$sJavaProgram' doesn't exists.\n"; + } + } + } + } + + log_print( "\n\n"); + close_logfile(); + + if ($nConvwatchFailed == 0) + { + print(" [ok]\n"); + } + else + { + print(" [FAILED]\n"); + print("\nPrint output of test: $sDocumentName\n"); + my $sLogFile = appendPath(getProjectOutput(), $sDocumentName . ".txt"); + showFile($sLogFile); + } + # printTime(endTime($nSimpleCompareTime)); + + return $nConvwatchFailed; +} + +# ------------------------------------------------------------------------------ +# cat $file +sub showFile($) +{ + my $logfile = shift; + local *LOGFILE; + if (open(LOGFILE, "$logfile")) + { + my $line; + while ($line = <LOGFILE>) + { + chomp($line); + print $line ."\n"; + } + close(LOGFILE); + } +} + + +1; diff --git a/testgraphical/source/loghelper.pm b/testgraphical/source/loghelper.pm new file mode 100644 index 000000000000..6dad31c7761a --- /dev/null +++ b/testgraphical/source/loghelper.pm @@ -0,0 +1,94 @@ +package loghelper; + +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +use strict; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + # if using RCS/CVS, this may be preferred + $VERSION = do { my @r = (q$Revision: 1.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + @ISA = qw(Exporter); + @EXPORT = qw(&set_logfile &close_logfile &log_print &setVerbose); + %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], + # your exported package globals go here, + # as well as any optionally exported functions + @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); +} + +# ------------------------------- Log into a file ------------------------------- +local *LOGFILE; +our $nGlobalLog = 0; +our $nGlobalVerbose = 0; + +sub setVerbose() +{ + $nGlobalVerbose = 1; +} + +sub set_logfile($) +{ + my $sLogFile = shift; + + if (open(LOGFILE, ">$sLogFile")) + { + $nGlobalLog = 1; + } +} +sub close_logfile() +{ + close(LOGFILE); + $nGlobalLog = 0; +} + +sub log_print($) +{ + my $sLine = shift; + if ($nGlobalLog) + { + print LOGFILE $sLine; + } + if ($nGlobalVerbose == 1) + { + print $sLine; + } + else + { + # In this special case for NetBeans, which show if a debugger can access. + # The Line should print anyway. + if ($sLine =~ /Listening for transport/) + { + print $sLine; + } + } +} + +1; diff --git a/testgraphical/source/makefile.mk b/testgraphical/source/makefile.mk new file mode 100644 index 000000000000..619fd7786f93 --- /dev/null +++ b/testgraphical/source/makefile.mk @@ -0,0 +1,112 @@ +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +PRJ=.. + +PRJNAME=gfxcmp +TARGET=notargetyet + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk + +# call with PDF=1 to use office pdf exporter instead of the XPrinter API +.IF "$(PDF)"!="" + CREATORTYPE="-creatortype" pdf +.ELSE + CREATORTYE="-creatortype" ps +.ENDIF + +.IF "$(SHOW)"!="" + P_SHOW=-show +.ENDIF + + +# call with PREPARE=1 to only create new reference files +# copy these files by hand into the corresponding directories +.IF "$(PREPARE)"!="" + PREPAREONLY="-prepareonly" 1 +.ELSE + PREPAREONLY= +.ENDIF + +.IF "$(DOCUMENTPOOL)"=="" + DOCUMENTPOOL=$PRJ$/document-pool +.ENDIF + +# PERLDEBUG=-d:ptkdb +ALLTAR: selftest +# pwd +# $(PERL) $(PERLDEBUG) compare.pl -MAJOR $(WORK_STAMP) -MINOR $(UPDMINOR) -cwsname "$(CWS_WORK_STAMP)" +# $(PERL) $(PERLDEBUG) compare.pl -pool singletest + +# $(PRJ)$/util$/makefile.pmk contains ALLTAR stuff + +# selftest is the default run through at the moment and use pdf export to create output. +# dmake +selftest: + $(PERL) $(PERLDEBUG) compare.pl -creatortype pdf $(PREPAREONLY) -pool singletest -document eis-test.odt $(P_SHOW) + +# selftest_ps is like the default run through but use always postscript print out +# dmake selftest_ps +selftest_ps: + $(PERL) $(PERLDEBUG) compare.pl -creatortype ps $(PREPAREONLY) -pool singletest -document eis-test.odt $(P_SHOW) + +# +# +# The follows are demonstration targets, DO NOT DELETE +# +# + +# dmake demo SHOW=1 +demo: + $(PERL) $(PERLDEBUG) compare.pl $(CREATORTYPE) $(PREPAREONLY) -pool $@ $(P_SHOW) + +# failtest is a demonstration of a failure, with SHOW=1 it should open a java windows which shows 3 pictures, +# the current document, the reference document and the difference between both. +# dmake failtest SHOW=1 +# dmake failtest PREPARE=1 +# This test will most the time fail, it is just a demonstration. +failtest: + $(PERL) $(PERLDEBUG) compare.pl $(CREATORTYPE) $(PREPAREONLY) -force -pool demo -document CurrentTime.ods $(P_SHOW) + +# manual runs through all documents found in document-pool +# dmake manual +# dmake manual PDF=1 SHOW=1 +# dmake manual PREPARE=1 PDF=1 +# should help to create a lot of references at one time. +manual: + $(PERL) $(PERLDEBUG) compare.pl $(CREATORTYPE) $(PREPAREONLY) -force $(P_SHOW) + +# msoffice: +# $(PERL) $(PERLDEBUG) compare.pl -creatortype msoffice $(PREPAREONLY) -pool msoffice -document calc_cellformat_import_biff8.xls $(P_SHOW) + +clean: diff --git a/testgraphical/source/oshelper.pm b/testgraphical/source/oshelper.pm new file mode 100644 index 000000000000..3f2ed1c44e38 --- /dev/null +++ b/testgraphical/source/oshelper.pm @@ -0,0 +1,110 @@ +package oshelper; + +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +use English; +use warnings; +use strict; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + # if using RCS/CVS, this may be preferred + $VERSION = do { my @r = (q$Revision: 1.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + @ISA = qw(Exporter); + @EXPORT = qw(&getEnvironment &isWindowsEnvironment &isUnixEnvironment &getUsername); + %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], + # your exported package globals go here, + # as well as any optionally exported functions + @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); +} + + +# ------------------------------------------------------------------------------ +sub getEnvironment() +{ + my $sEnvironment; + if ($OSNAME eq "MSWin32" || $OSNAME eq "cygwin") + { + $sEnvironment = "wntmsci"; + } + elsif ( $OSNAME eq "linux") + { + $sEnvironment = "unxlngi"; + } + elsif ( $OSNAME eq "solaris") + { + $sEnvironment = "unxsoli"; + } + else + { + print "Unknown Environment please check OSNAME: '$OSNAME'\n"; + $sEnvironment = "unknown"; + } + return $sEnvironment; +} + +# ------------------------------------------------------------------------------ + +sub isWindowsEnvironment() +{ + if ($OSNAME eq "MSWin32" || + $OSNAME eq "cygwin") + { + return 1; + } + return 0; +} + +sub isUnixEnvironment() +{ + if ($OSNAME eq "linux" || + $OSNAME eq "solaris") + { + return 1; + } + return 0; +} + +sub getUsername() +{ + my $sUser = $ENV{USER}; + if (!$sUser) + { + $sUser = $ENV{USERNAME}; + } + if (!$sUser) + { + die "Username not set.\n"; + } + return $sUser; +} + +1; diff --git a/testgraphical/source/solarenvhelper.pm b/testgraphical/source/solarenvhelper.pm new file mode 100644 index 000000000000..f8ec17ece12b --- /dev/null +++ b/testgraphical/source/solarenvhelper.pm @@ -0,0 +1,63 @@ +package solarenvhelper; + +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +use strict; +use warnings; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + # if using RCS/CVS, this may be preferred + $VERSION = do { my @r = (q$Revision: 1.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + @ISA = qw(Exporter); + @EXPORT = qw(&setSolenvPath &getSolenvPath); + %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], + # your exported package globals go here, + # as well as any optionally exported functions + @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); +} + +our $sSolenvPath; +sub setSolenvPath($) +{ + $sSolenvPath = shift; +} +sub getSolenvPath() +{ + if ($sSolenvPath) + { + return $sSolenvPath; + } + print "INTERNAL ERROR: You must set the solenv path to the performancetest, by call setSolenvPath()\n"; + exit 1; +} + +1; diff --git a/testgraphical/source/stringhelper.pm b/testgraphical/source/stringhelper.pm new file mode 100644 index 000000000000..e7d19256bf1b --- /dev/null +++ b/testgraphical/source/stringhelper.pm @@ -0,0 +1,69 @@ +package stringhelper; + +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +use strict; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + # if using RCS/CVS, this may be preferred + $VERSION = do { my @r = (q$Revision: 1.2 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + @ISA = qw(Exporter); + @EXPORT = qw(&endswith &startswith); + %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], + # your exported package globals go here, + # as well as any optionally exported functions + @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); +} + +# string helper like java endsWith +sub endswith($$) +{ + my $string = shift; + my $search = shift; + if ( $string =~ /${search}$/ ) + { + return 1; + } + return 0; +} +sub startswith($$) +{ + my $string = shift; + my $search = shift; + if ( $string =~ /^${search}/ ) + { + return 1; + } + return 0; +} + +1; diff --git a/testgraphical/source/timehelper.pm b/testgraphical/source/timehelper.pm new file mode 100644 index 000000000000..38bd56fc4b20 --- /dev/null +++ b/testgraphical/source/timehelper.pm @@ -0,0 +1,99 @@ +package timehelper; + +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +use POSIX qw(strftime); +use POSIX qw(time difftime); +# use POSIX qw(localtime); +use strict; +# use Time::localtime; +use loghelper; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + # if using RCS/CVS, this may be preferred + $VERSION = do { my @r = (q$Revision: 1.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + @ISA = qw(Exporter); + @EXPORT = qw(&getTime &endTime &printTime &waitAMinute ); + %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], + # your exported package globals go here, + # as well as any optionally exported functions + @EXPORT_OK = ( ); # qw($Var1 %Hashit &func3); +} + + +# ------------------------------------------------------------------------------ +# our $starttime; +sub getTime() +{ + my $nValue; + # $nValue = localtime->sec(); + # $nValue += 60 * localtime->min(); + # $nValue += 3600 * localtime->hour(); + $nValue = time(); + return $nValue; +} +# sub startTime() +# { +# $starttime = getTime(); +# } +sub endTime($) +{ + my $starttime = shift; + + my $endtime = getTime(); + my $nTime = difftime($endtime, $starttime); + # my $nTime = $endtime - $starttime; + # if ($nTime < 0) + # { + # $nTime += 24 * 3600; # add 24 hours + # } + return $nTime; +} +sub printTime($) +{ + my $nTime = shift; + print( "Time: " . $nTime . " seconds.\n\n"); +} + + +# sub waitAMinute() +# { +# # _waitInSeconds(20); +# # _waitInSeconds(20); +# my $now_string = strftime "%a %b %e %H:%M:%S %Y", localtime; +# print $now_string . "\n"; +# # print getCurrentDateString() . "\n"; +# sleep(60); +# } +# + +1; diff --git a/testgraphical/ui/java/ConvwatchGUIProject/build.xml b/testgraphical/ui/java/ConvwatchGUIProject/build.xml new file mode 100644 index 000000000000..e4d82212f35d --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/build.xml @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- You may freely edit this file. See commented blocks below for --> +<!-- some examples of how to customize the build. --> +<!-- (If you delete it and reopen the project it will be recreated.) --> +<!-- By default, only the Clean and Build commands use this build script. --> +<!-- Commands such as Run, Debug, and Test only use this build script if --> +<!-- the Compile on Save feature is turned off for the project. --> +<!-- You can turn off the Compile on Save (or Deploy on Save) setting --> +<!-- in the project's Project Properties dialog box.--> +<project name="ConvwatchGUIProject" default="default" basedir="."> + <description>Builds, tests, and runs the project ConvwatchGUIProject.</description> + <import file="nbproject/build-impl.xml"/> + <!-- + + There exist several targets which are by default empty and which can be + used for execution of your tasks. These targets are usually executed + before and after some main targets. They are: + + -pre-init: called before initialization of project properties + -post-init: called after initialization of project properties + -pre-compile: called before javac compilation + -post-compile: called after javac compilation + -pre-compile-single: called before javac compilation of single file + -post-compile-single: called after javac compilation of single file + -pre-compile-test: called before javac compilation of JUnit tests + -post-compile-test: called after javac compilation of JUnit tests + -pre-compile-test-single: called before javac compilation of single JUnit test + -post-compile-test-single: called after javac compilation of single JUunit test + -pre-jar: called before JAR building + -post-jar: called after JAR building + -post-clean: called after cleaning build products + + (Targets beginning with '-' are not intended to be called on their own.) + + Example of inserting an obfuscator after compilation could look like this: + + <target name="-post-compile"> + <obfuscate> + <fileset dir="${build.classes.dir}"/> + </obfuscate> + </target> + + For list of available properties check the imported + nbproject/build-impl.xml file. + + + Another way to customize the build is by overriding existing main targets. + The targets of interest are: + + -init-macrodef-javac: defines macro for javac compilation + -init-macrodef-junit: defines macro for junit execution + -init-macrodef-debug: defines macro for class debugging + -init-macrodef-java: defines macro for class execution + -do-jar-with-manifest: JAR building (if you are using a manifest) + -do-jar-without-manifest: JAR building (if you are not using a manifest) + run: execution of project + -javadoc-build: Javadoc generation + test-report: JUnit report generation + + An example of overriding the target for project execution could look like this: + + <target name="run" depends="ConvwatchGUIProject-impl.jar"> + <exec dir="bin" executable="launcher.exe"> + <arg file="${dist.jar}"/> + </exec> + </target> + + Notice that the overridden target depends on the jar target and not only on + the compile target as the regular run target does. Again, for a list of available + properties which you can use, check the target you are overriding in the + nbproject/build-impl.xml file. + + --> +</project> diff --git a/testgraphical/ui/java/ConvwatchGUIProject/dist/ConvwatchGUIProject.jar b/testgraphical/ui/java/ConvwatchGUIProject/dist/ConvwatchGUIProject.jar Binary files differnew file mode 100644 index 000000000000..3b0ac20afa74 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/dist/ConvwatchGUIProject.jar diff --git a/testgraphical/ui/java/ConvwatchGUIProject/makefile.mk b/testgraphical/ui/java/ConvwatchGUIProject/makefile.mk new file mode 100644 index 000000000000..5cb16f1d4c31 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/makefile.mk @@ -0,0 +1,71 @@ +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +PRJ=../../.. + +PRJNAME=gfxcmp_ui_java_convwatchgui +TARGET=notargetyet + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk + +# --- ANT build environment --------------------------------------- + +.INCLUDE : antsettings.mk + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk + +.IF "$(SHOW)" == "" +nothing .PHONY: + +.ELSE + + +ALLTAR: dist/ConvwatchGUIProject.jar + +dist/ConvwatchGUIProject.jar: src/ConvwatchGUI.java src/IniFile.java +# .if $(JDK_VERSION) < 160 +# echo "You need at least java 6" +# error +# .endif +# +.IF "$(GUI)"=="WNT" + $(ANT) +.ELSE + ant +.END + +.END + +.INCLUDE : $(PRJ)$/util$/makefile.pmk + +clean: + $(ANT) clean + diff --git a/testgraphical/ui/java/ConvwatchGUIProject/manifest.mf b/testgraphical/ui/java/ConvwatchGUIProject/manifest.mf new file mode 100644 index 000000000000..328e8e5bc3b7 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/testgraphical/ui/java/ConvwatchGUIProject/nbproject/build-impl.xml b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/build-impl.xml new file mode 100644 index 000000000000..e493afec4fc3 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/build-impl.xml @@ -0,0 +1,805 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +*** GENERATED FROM project.xml - DO NOT EDIT *** +*** EDIT ../build.xml INSTEAD *** + +For the purpose of easier reading the script +is divided into following sections: + + - initialization + - compilation + - jar + - execution + - debugging + - javadoc + - junit compilation + - junit execution + - junit debugging + - applet + - cleanup + + --> +<project xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" basedir=".." default="default" name="ConvwatchGUIProject-impl"> + <fail message="Please build using Ant 1.7.1 or higher."> + <condition> + <not> + <antversion atleast="1.7.1"/> + </not> + </condition> + </fail> + <target depends="test,jar,javadoc" description="Build and test whole project." name="default"/> + <!-- + ====================== + INITIALIZATION SECTION + ====================== + --> + <target name="-pre-init"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="-pre-init" name="-init-private"> + <property file="nbproject/private/config.properties"/> + <property file="nbproject/private/configs/${config}.properties"/> + <property file="nbproject/private/private.properties"/> + </target> + <target depends="-pre-init,-init-private" name="-init-user"> + <property file="${user.properties.file}"/> + <!-- The two properties below are usually overridden --> + <!-- by the active platform. Just a fallback. --> + <property name="default.javac.source" value="1.4"/> + <property name="default.javac.target" value="1.4"/> + </target> + <target depends="-pre-init,-init-private,-init-user" name="-init-project"> + <property file="nbproject/configs/${config}.properties"/> + <property file="nbproject/project.properties"/> + </target> + <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init"> + <available file="${manifest.file}" property="manifest.available"/> + <condition property="main.class.available"> + <and> + <isset property="main.class"/> + <not> + <equals arg1="${main.class}" arg2="" trim="true"/> + </not> + </and> + </condition> + <condition property="manifest.available+main.class"> + <and> + <isset property="manifest.available"/> + <isset property="main.class.available"/> + </and> + </condition> + <condition property="do.mkdist"> + <and> + <isset property="libs.CopyLibs.classpath"/> + <not> + <istrue value="${mkdist.disabled}"/> + </not> + </and> + </condition> + <condition property="manifest.available+main.class+mkdist.available"> + <and> + <istrue value="${manifest.available+main.class}"/> + <isset property="do.mkdist"/> + </and> + </condition> + <condition property="manifest.available+mkdist.available"> + <and> + <istrue value="${manifest.available}"/> + <isset property="do.mkdist"/> + </and> + </condition> + <condition property="manifest.available-mkdist.available"> + <or> + <istrue value="${manifest.available}"/> + <isset property="do.mkdist"/> + </or> + </condition> + <condition property="manifest.available+main.class-mkdist.available"> + <or> + <istrue value="${manifest.available+main.class}"/> + <isset property="do.mkdist"/> + </or> + </condition> + <condition property="have.tests"> + <or> + <available file="${test.src.dir}"/> + </or> + </condition> + <condition property="have.sources"> + <or> + <available file="${src.dir}"/> + </or> + </condition> + <condition property="netbeans.home+have.tests"> + <and> + <isset property="netbeans.home"/> + <isset property="have.tests"/> + </and> + </condition> + <condition property="no.javadoc.preview"> + <and> + <isset property="javadoc.preview"/> + <isfalse value="${javadoc.preview}"/> + </and> + </condition> + <property name="run.jvmargs" value=""/> + <property name="javac.compilerargs" value=""/> + <property name="work.dir" value="${basedir}"/> + <condition property="no.deps"> + <and> + <istrue value="${no.dependencies}"/> + </and> + </condition> + <property name="javac.debug" value="true"/> + <property name="javadoc.preview" value="true"/> + <property name="application.args" value=""/> + <property name="source.encoding" value="${file.encoding}"/> + <property name="runtime.encoding" value="${source.encoding}"/> + <condition property="javadoc.encoding.used" value="${javadoc.encoding}"> + <and> + <isset property="javadoc.encoding"/> + <not> + <equals arg1="${javadoc.encoding}" arg2=""/> + </not> + </and> + </condition> + <property name="javadoc.encoding.used" value="${source.encoding}"/> + <property name="includes" value="**"/> + <property name="excludes" value=""/> + <property name="do.depend" value="false"/> + <condition property="do.depend.true"> + <istrue value="${do.depend}"/> + </condition> + <path id="endorsed.classpath.path" path="${endorsed.classpath}"/> + <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'"> + <length length="0" string="${endorsed.classpath}" when="greater"/> + </condition> + <property name="javac.fork" value="false"/> + </target> + <target name="-post-init"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check"> + <fail unless="src.dir">Must set src.dir</fail> + <fail unless="test.src.dir">Must set test.src.dir</fail> + <fail unless="build.dir">Must set build.dir</fail> + <fail unless="dist.dir">Must set dist.dir</fail> + <fail unless="build.classes.dir">Must set build.classes.dir</fail> + <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail> + <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail> + <fail unless="build.test.results.dir">Must set build.test.results.dir</fail> + <fail unless="build.classes.excludes">Must set build.classes.excludes</fail> + <fail unless="dist.jar">Must set dist.jar</fail> + </target> + <target name="-init-macrodef-property"> + <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1"> + <attribute name="name"/> + <attribute name="value"/> + <sequential> + <property name="@{name}" value="${@{value}}"/> + </sequential> + </macrodef> + </target> + <target name="-init-macrodef-javac"> + <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3"> + <attribute default="${src.dir}" name="srcdir"/> + <attribute default="${build.classes.dir}" name="destdir"/> + <attribute default="${javac.classpath}" name="classpath"/> + <attribute default="${includes}" name="includes"/> + <attribute default="${excludes}" name="excludes"/> + <attribute default="${javac.debug}" name="debug"/> + <attribute default="${empty.dir}" name="sourcepath"/> + <attribute default="${empty.dir}" name="gensrcdir"/> + <element name="customize" optional="true"/> + <sequential> + <property location="${build.dir}/empty" name="empty.dir"/> + <mkdir dir="${empty.dir}"/> + <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}"> + <src> + <dirset dir="@{gensrcdir}" erroronmissingdir="false"> + <include name="*"/> + </dirset> + </src> + <classpath> + <path path="@{classpath}"/> + </classpath> + <compilerarg line="${endorsed.classpath.cmd.line.arg}"/> + <compilerarg line="${javac.compilerargs}"/> + <customize/> + </javac> + </sequential> + </macrodef> + <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3"> + <attribute default="${src.dir}" name="srcdir"/> + <attribute default="${build.classes.dir}" name="destdir"/> + <attribute default="${javac.classpath}" name="classpath"/> + <sequential> + <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}"> + <classpath> + <path path="@{classpath}"/> + </classpath> + </depend> + </sequential> + </macrodef> + <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/j2se-project/3"> + <attribute default="${build.classes.dir}" name="destdir"/> + <sequential> + <fail unless="javac.includes">Must set javac.includes</fail> + <pathconvert pathsep="," property="javac.includes.binary"> + <path> + <filelist dir="@{destdir}" files="${javac.includes}"/> + </path> + <globmapper from="*.java" to="*.class"/> + </pathconvert> + <delete> + <files includes="${javac.includes.binary}"/> + </delete> + </sequential> + </macrodef> + </target> + <target name="-init-macrodef-junit"> + <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3"> + <attribute default="${includes}" name="includes"/> + <attribute default="${excludes}" name="excludes"/> + <attribute default="**" name="testincludes"/> + <sequential> + <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true" tempdir="${build.dir}"> + <batchtest todir="${build.test.results.dir}"> + <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}"> + <filename name="@{testincludes}"/> + </fileset> + </batchtest> + <classpath> + <path path="${run.test.classpath}"/> + </classpath> + <syspropertyset> + <propertyref prefix="test-sys-prop."/> + <mapper from="test-sys-prop.*" to="*" type="glob"/> + </syspropertyset> + <formatter type="brief" usefile="false"/> + <formatter type="xml"/> + <jvmarg line="${endorsed.classpath.cmd.line.arg}"/> + <jvmarg line="${run.jvmargs}"/> + </junit> + </sequential> + </macrodef> + </target> + <target depends="-init-debug-args" name="-init-macrodef-nbjpda"> + <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1"> + <attribute default="${main.class}" name="name"/> + <attribute default="${debug.classpath}" name="classpath"/> + <attribute default="" name="stopclassname"/> + <sequential> + <nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="${debug-transport}"> + <classpath> + <path path="@{classpath}"/> + </classpath> + </nbjpdastart> + </sequential> + </macrodef> + <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/j2se-project/1"> + <attribute default="${build.classes.dir}" name="dir"/> + <sequential> + <nbjpdareload> + <fileset dir="@{dir}" includes="${fix.classes}"> + <include name="${fix.includes}*.class"/> + </fileset> + </nbjpdareload> + </sequential> + </macrodef> + </target> + <target name="-init-debug-args"> + <property name="version-output" value="java version "${ant.java.version}"/> + <condition property="have-jdk-older-than-1.4"> + <or> + <contains string="${version-output}" substring="java version "1.0"/> + <contains string="${version-output}" substring="java version "1.1"/> + <contains string="${version-output}" substring="java version "1.2"/> + <contains string="${version-output}" substring="java version "1.3"/> + </or> + </condition> + <condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none"> + <istrue value="${have-jdk-older-than-1.4}"/> + </condition> + <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem"> + <os family="windows"/> + </condition> + <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}"> + <isset property="debug.transport"/> + </condition> + </target> + <target depends="-init-debug-args" name="-init-macrodef-debug"> + <macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3"> + <attribute default="${main.class}" name="classname"/> + <attribute default="${debug.classpath}" name="classpath"/> + <element name="customize" optional="true"/> + <sequential> + <java classname="@{classname}" dir="${work.dir}" fork="true"> + <jvmarg line="${endorsed.classpath.cmd.line.arg}"/> + <jvmarg line="${debug-args-line}"/> + <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/> + <jvmarg value="-Dfile.encoding=${runtime.encoding}"/> + <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/> + <jvmarg line="${run.jvmargs}"/> + <classpath> + <path path="@{classpath}"/> + </classpath> + <syspropertyset> + <propertyref prefix="run-sys-prop."/> + <mapper from="run-sys-prop.*" to="*" type="glob"/> + </syspropertyset> + <customize/> + </java> + </sequential> + </macrodef> + </target> + <target name="-init-macrodef-java"> + <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1"> + <attribute default="${main.class}" name="classname"/> + <attribute default="${run.classpath}" name="classpath"/> + <element name="customize" optional="true"/> + <sequential> + <java classname="@{classname}" dir="${work.dir}" fork="true"> + <jvmarg line="${endorsed.classpath.cmd.line.arg}"/> + <jvmarg value="-Dfile.encoding=${runtime.encoding}"/> + <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/> + <jvmarg line="${run.jvmargs}"/> + <classpath> + <path path="@{classpath}"/> + </classpath> + <syspropertyset> + <propertyref prefix="run-sys-prop."/> + <mapper from="run-sys-prop.*" to="*" type="glob"/> + </syspropertyset> + <customize/> + </java> + </sequential> + </macrodef> + </target> + <target name="-init-presetdef-jar"> + <presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1"> + <jar compress="${jar.compress}" jarfile="${dist.jar}"> + <j2seproject1:fileset dir="${build.classes.dir}"/> + </jar> + </presetdef> + </target> + <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-junit,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar" name="init"/> + <!-- + =================== + COMPILATION SECTION + =================== + --> + <target name="-deps-jar-init" unless="built-jar.properties"> + <property location="${build.dir}/built-jar.properties" name="built-jar.properties"/> + <delete file="${built-jar.properties}" quiet="true"/> + </target> + <target if="already.built.jar.${basedir}" name="-warn-already-built-jar"> + <echo level="warn" message="Cycle detected: ConvwatchGUIProject was already built"/> + </target> + <target depends="init,-deps-jar-init" name="deps-jar" unless="no.deps"> + <mkdir dir="${build.dir}"/> + <touch file="${built-jar.properties}" verbose="false"/> + <property file="${built-jar.properties}" prefix="already.built.jar."/> + <antcall target="-warn-already-built-jar"/> + <propertyfile file="${built-jar.properties}"> + <entry key="${basedir}" value=""/> + </propertyfile> + </target> + <target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/> + <target depends="init" name="-check-automatic-build"> + <available file="${build.classes.dir}/.netbeans_automatic_build" property="netbeans.automatic.build"/> + </target> + <target depends="init" if="netbeans.automatic.build" name="-clean-after-automatic-build"> + <antcall target="clean"/> + </target> + <target depends="init,deps-jar" name="-pre-pre-compile"> + <mkdir dir="${build.classes.dir}"/> + </target> + <target name="-pre-compile"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target if="do.depend.true" name="-compile-depend"> + <pathconvert property="build.generated.subdirs"> + <dirset dir="${build.generated.sources.dir}" erroronmissingdir="false"> + <include name="*"/> + </dirset> + </pathconvert> + <j2seproject3:depend srcdir="${src.dir}:${build.generated.subdirs}"/> + </target> + <target depends="init,deps-jar,-pre-pre-compile,-pre-compile,-compile-depend" if="have.sources" name="-do-compile"> + <j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/> + <copy todir="${build.classes.dir}"> + <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/> + </copy> + </target> + <target name="-post-compile"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/> + <target name="-pre-compile-single"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single"> + <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail> + <j2seproject3:force-recompile/> + <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" sourcepath="${src.dir}"/> + </target> + <target name="-post-compile-single"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/> + <!-- + ==================== + JAR BUILDING SECTION + ==================== + --> + <target depends="init" name="-pre-pre-jar"> + <dirname file="${dist.jar}" property="dist.jar.dir"/> + <mkdir dir="${dist.jar.dir}"/> + </target> + <target name="-pre-jar"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,compile,-pre-pre-jar,-pre-jar" name="-do-jar-without-manifest" unless="manifest.available-mkdist.available"> + <j2seproject1:jar/> + </target> + <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available" name="-do-jar-with-manifest" unless="manifest.available+main.class-mkdist.available"> + <j2seproject1:jar manifest="${manifest.file}"/> + </target> + <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class" name="-do-jar-with-mainclass" unless="manifest.available+main.class+mkdist.available"> + <j2seproject1:jar manifest="${manifest.file}"> + <j2seproject1:manifest> + <j2seproject1:attribute name="Main-Class" value="${main.class}"/> + </j2seproject1:manifest> + </j2seproject1:jar> + <echo>To run this application from the command line without Ant, try:</echo> + <property location="${build.classes.dir}" name="build.classes.dir.resolved"/> + <property location="${dist.jar}" name="dist.jar.resolved"/> + <pathconvert property="run.classpath.with.dist.jar"> + <path path="${run.classpath}"/> + <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/> + </pathconvert> + <echo>java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo> + </target> + <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class+mkdist.available" name="-do-jar-with-libraries"> + <property location="${build.classes.dir}" name="build.classes.dir.resolved"/> + <pathconvert property="run.classpath.without.build.classes.dir"> + <path path="${run.classpath}"/> + <map from="${build.classes.dir.resolved}" to=""/> + </pathconvert> + <pathconvert pathsep=" " property="jar.classpath"> + <path path="${run.classpath.without.build.classes.dir}"/> + <chainedmapper> + <flattenmapper/> + <globmapper from="*" to="lib/*"/> + </chainedmapper> + </pathconvert> + <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/> + <copylibs compress="${jar.compress}" jarfile="${dist.jar}" manifest="${manifest.file}" runtimeclasspath="${run.classpath.without.build.classes.dir}"> + <fileset dir="${build.classes.dir}"/> + <manifest> + <attribute name="Main-Class" value="${main.class}"/> + <attribute name="Class-Path" value="${jar.classpath}"/> + </manifest> + </copylibs> + <echo>To run this application from the command line without Ant, try:</echo> + <property location="${dist.jar}" name="dist.jar.resolved"/> + <echo>java -jar "${dist.jar.resolved}"</echo> + </target> + <target depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+mkdist.available" name="-do-jar-with-libraries-without-mainclass" unless="main.class.available"> + <property location="${build.classes.dir}" name="build.classes.dir.resolved"/> + <pathconvert property="run.classpath.without.build.classes.dir"> + <path path="${run.classpath}"/> + <map from="${build.classes.dir.resolved}" to=""/> + </pathconvert> + <pathconvert pathsep=" " property="jar.classpath"> + <path path="${run.classpath.without.build.classes.dir}"/> + <chainedmapper> + <flattenmapper/> + <globmapper from="*" to="lib/*"/> + </chainedmapper> + </pathconvert> + <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/> + <copylibs compress="${jar.compress}" jarfile="${dist.jar}" manifest="${manifest.file}" runtimeclasspath="${run.classpath.without.build.classes.dir}"> + <fileset dir="${build.classes.dir}"/> + <manifest> + <attribute name="Class-Path" value="${jar.classpath}"/> + </manifest> + </copylibs> + </target> + <target depends="init,compile,-pre-pre-jar,-pre-jar" if="do.mkdist" name="-do-jar-with-libraries-without-manifest" unless="manifest.available"> + <property location="${build.classes.dir}" name="build.classes.dir.resolved"/> + <pathconvert property="run.classpath.without.build.classes.dir"> + <path path="${run.classpath}"/> + <map from="${build.classes.dir.resolved}" to=""/> + </pathconvert> + <pathconvert pathsep=" " property="jar.classpath"> + <path path="${run.classpath.without.build.classes.dir}"/> + <chainedmapper> + <flattenmapper/> + <globmapper from="*" to="lib/*"/> + </chainedmapper> + </pathconvert> + <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/> + <copylibs compress="${jar.compress}" jarfile="${dist.jar}" runtimeclasspath="${run.classpath.without.build.classes.dir}"> + <fileset dir="${build.classes.dir}"/> + <manifest> + <attribute name="Class-Path" value="${jar.classpath}"/> + </manifest> + </copylibs> + </target> + <target name="-post-jar"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-do-jar-with-libraries-without-mainclass,-do-jar-with-libraries-without-manifest,-post-jar" description="Build JAR." name="jar"/> + <!-- + ================= + EXECUTION SECTION + ================= + --> + <target depends="init,compile" description="Run a main class." name="run"> + <j2seproject1:java> + <customize> + <arg line="${application.args}"/> + </customize> + </j2seproject1:java> + </target> + <target name="-do-not-recompile"> + <property name="javac.includes.binary" value=""/> + </target> + <target depends="init,compile-single" name="run-single"> + <fail unless="run.class">Must select one file in the IDE or set run.class</fail> + <j2seproject1:java classname="${run.class}"/> + </target> + <target depends="init,compile-test-single" name="run-test-with-main"> + <fail unless="run.class">Must select one file in the IDE or set run.class</fail> + <j2seproject1:java classname="${run.class}" classpath="${run.test.classpath}"/> + </target> + <!-- + ================= + DEBUGGING SECTION + ================= + --> + <target depends="init" if="netbeans.home" name="-debug-start-debugger"> + <j2seproject1:nbjpdastart name="${debug.class}"/> + </target> + <target depends="init" if="netbeans.home" name="-debug-start-debugger-main-test"> + <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${debug.class}"/> + </target> + <target depends="init,compile" name="-debug-start-debuggee"> + <j2seproject3:debug> + <customize> + <arg line="${application.args}"/> + </customize> + </j2seproject3:debug> + </target> + <target depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE." if="netbeans.home" name="debug"/> + <target depends="init" if="netbeans.home" name="-debug-start-debugger-stepinto"> + <j2seproject1:nbjpdastart stopclassname="${main.class}"/> + </target> + <target depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee" if="netbeans.home" name="debug-stepinto"/> + <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single"> + <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail> + <j2seproject3:debug classname="${debug.class}"/> + </target> + <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single"/> + <target depends="init,compile-test-single" if="netbeans.home" name="-debug-start-debuggee-main-test"> + <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail> + <j2seproject3:debug classname="${debug.class}" classpath="${debug.test.classpath}"/> + </target> + <target depends="init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test" if="netbeans.home" name="debug-test-with-main"/> + <target depends="init" name="-pre-debug-fix"> + <fail unless="fix.includes">Must set fix.includes</fail> + <property name="javac.includes" value="${fix.includes}.java"/> + </target> + <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix"> + <j2seproject1:nbjpdareload/> + </target> + <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/> + <!-- + =============== + JAVADOC SECTION + =============== + --> + <target depends="init" name="-javadoc-build"> + <mkdir dir="${dist.javadoc.dir}"/> + <javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}"> + <classpath> + <path path="${javac.classpath}"/> + </classpath> + <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}"> + <filename name="**/*.java"/> + </fileset> + <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false"> + <include name="**/*.java"/> + </fileset> + </javadoc> + </target> + <target depends="init,-javadoc-build" if="netbeans.home" name="-javadoc-browse" unless="no.javadoc.preview"> + <nbbrowse file="${dist.javadoc.dir}/index.html"/> + </target> + <target depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc." name="javadoc"/> + <!-- + ========================= + JUNIT COMPILATION SECTION + ========================= + --> + <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test"> + <mkdir dir="${build.test.classes.dir}"/> + </target> + <target name="-pre-compile-test"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target if="do.depend.true" name="-compile-test-depend"> + <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/> + </target> + <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test"> + <j2seproject3:javac classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/> + <copy todir="${build.test.classes.dir}"> + <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/> + </copy> + </target> + <target name="-post-compile-test"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/> + <target name="-pre-compile-test-single"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single"> + <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail> + <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/> + <j2seproject3:javac classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" sourcepath="${test.src.dir}" srcdir="${test.src.dir}"/> + <copy todir="${build.test.classes.dir}"> + <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/> + </copy> + </target> + <target name="-post-compile-test-single"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/> + <!-- + ======================= + JUNIT EXECUTION SECTION + ======================= + --> + <target depends="init" if="have.tests" name="-pre-test-run"> + <mkdir dir="${build.test.results.dir}"/> + </target> + <target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run"> + <j2seproject3:junit testincludes="**/*Test.java"/> + </target> + <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run"> + <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail> + </target> + <target depends="init" if="have.tests" name="test-report"/> + <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/> + <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/> + <target depends="init" if="have.tests" name="-pre-test-run-single"> + <mkdir dir="${build.test.results.dir}"/> + </target> + <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single"> + <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail> + <j2seproject3:junit excludes="" includes="${test.includes}"/> + </target> + <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single"> + <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail> + </target> + <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/> + <!-- + ======================= + JUNIT DEBUGGING SECTION + ======================= + --> + <target depends="init,compile-test" if="have.tests" name="-debug-start-debuggee-test"> + <fail unless="test.class">Must select one file in the IDE or set test.class</fail> + <property location="${build.test.results.dir}/TEST-${test.class}.xml" name="test.report.file"/> + <delete file="${test.report.file}"/> + <mkdir dir="${build.test.results.dir}"/> + <j2seproject3:debug classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner" classpath="${ant.home}/lib/ant.jar:${ant.home}/lib/ant-junit.jar:${debug.test.classpath}"> + <customize> + <syspropertyset> + <propertyref prefix="test-sys-prop."/> + <mapper from="test-sys-prop.*" to="*" type="glob"/> + </syspropertyset> + <arg value="${test.class}"/> + <arg value="showoutput=true"/> + <arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.BriefJUnitResultFormatter"/> + <arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter,${test.report.file}"/> + </customize> + </j2seproject3:debug> + </target> + <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test"> + <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/> + </target> + <target depends="init,compile-test-single,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/> + <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test"> + <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/> + </target> + <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/> + <!-- + ========================= + APPLET EXECUTION SECTION + ========================= + --> + <target depends="init,compile-single" name="run-applet"> + <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail> + <j2seproject1:java classname="sun.applet.AppletViewer"> + <customize> + <arg value="${applet.url}"/> + </customize> + </j2seproject1:java> + </target> + <!-- + ========================= + APPLET DEBUGGING SECTION + ========================= + --> + <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-applet"> + <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail> + <j2seproject3:debug classname="sun.applet.AppletViewer"> + <customize> + <arg value="${applet.url}"/> + </customize> + </j2seproject3:debug> + </target> + <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet" if="netbeans.home" name="debug-applet"/> + <!-- + =============== + CLEANUP SECTION + =============== + --> + <target name="-deps-clean-init" unless="built-clean.properties"> + <property location="${build.dir}/built-clean.properties" name="built-clean.properties"/> + <delete file="${built-clean.properties}" quiet="true"/> + </target> + <target if="already.built.clean.${basedir}" name="-warn-already-built-clean"> + <echo level="warn" message="Cycle detected: ConvwatchGUIProject was already built"/> + </target> + <target depends="init,-deps-clean-init" name="deps-clean" unless="no.deps"> + <mkdir dir="${build.dir}"/> + <touch file="${built-clean.properties}" verbose="false"/> + <property file="${built-clean.properties}" prefix="already.built.clean."/> + <antcall target="-warn-already-built-clean"/> + <propertyfile file="${built-clean.properties}"> + <entry key="${basedir}" value=""/> + </propertyfile> + </target> + <target depends="init" name="-do-clean"> + <delete dir="${build.dir}"/> + <delete dir="${dist.dir}" followsymlinks="false" includeemptydirs="true"/> + </target> + <target name="-post-clean"> + <!-- Empty placeholder for easier customization. --> + <!-- You can override this target in the ../build.xml file. --> + </target> + <target depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products." name="clean"/> + <target name="-check-call-dep"> + <property file="${call.built.properties}" prefix="already.built."/> + <condition property="should.call.dep"> + <not> + <isset property="already.built.${call.subproject}"/> + </not> + </condition> + </target> + <target depends="-check-call-dep" if="should.call.dep" name="-maybe-call-dep"> + <ant antfile="${call.script}" inheritall="false" target="${call.target}"> + <propertyset> + <propertyref prefix="transfer."/> + <mapper from="transfer.*" to="*" type="glob"/> + </propertyset> + </ant> + </target> +</project> diff --git a/testgraphical/ui/java/ConvwatchGUIProject/nbproject/genfiles.properties b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/genfiles.properties new file mode 100644 index 000000000000..1b4512b96265 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=d17eccb2 +build.xml.script.CRC32=a183e208 +build.xml.stylesheet.CRC32=958a1d3e@1.32.1.45 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=d17eccb2 +nbproject/build-impl.xml.script.CRC32=ea0e5dc9 +nbproject/build-impl.xml.stylesheet.CRC32=576378a2@1.32.1.45 diff --git a/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/config.properties b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/config.properties new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/config.properties diff --git a/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/private.properties b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/private.properties new file mode 100644 index 000000000000..18af3f70309a --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/private.properties @@ -0,0 +1,7 @@ +application.args=D:\\sources\\gfxcmp02\\DEV300\\ooo\\testgraphical\\wntmsci12.pro\\misc\\CurrentTime.ods.ps.ini +compile.on.save=true +do.depend=false +do.jar=true +javac.debug=true +javadoc.preview=true +user.properties.file=C:\\Documents and Settings\\ll93751\\.netbeans\\6.8\\build.properties diff --git a/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/private.xml b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/private.xml new file mode 100644 index 000000000000..c1f155a782bd --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/private.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project-private xmlns="http://www.netbeans.org/ns/project-private/1"> + <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/1"/> +</project-private> diff --git a/testgraphical/ui/java/ConvwatchGUIProject/nbproject/project.properties b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/project.properties new file mode 100644 index 000000000000..3ec3fae330ae --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/project.properties @@ -0,0 +1,71 @@ +application.desc=This Program shows three pictures in one line. +application.title=ConvwatchGUIProject +application.vendor=Oracle and/or its affiliates +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/ConvwatchGUIProject.jar +dist.javadoc.dir=${dist.dir}/javadoc +endorsed.classpath= +excludes= +includes=** +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.source=1.5 +javac.target=1.5 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir}:\ + ${libs.junit.classpath}:\ + ${libs.junit_4.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +jnlp.codebase.type=local +jnlp.descriptor=application +jnlp.enabled=false +jnlp.offline-allowed=false +jnlp.signed=false +main.class=ConvwatchGUI +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value +# or test-sys-prop.name=value to set system properties for unit tests): +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/testgraphical/ui/java/ConvwatchGUIProject/nbproject/project.xml b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/project.xml new file mode 100644 index 000000000000..0bc513904c86 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/project.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://www.netbeans.org/ns/project/1"> + <type>org.netbeans.modules.java.j2seproject</type> + <configuration> + <data xmlns="http://www.netbeans.org/ns/j2se-project/3"> + <name>ConvwatchGUIProject</name> + <source-roots> + <root id="src.dir"/> + </source-roots> + <test-roots> + <root id="test.src.dir"/> + </test-roots> + </data> + </configuration> +</project> diff --git a/testgraphical/ui/java/ConvwatchGUIProject/src/ConvwatchGUI.form b/testgraphical/ui/java/ConvwatchGUIProject/src/ConvwatchGUI.form new file mode 100644 index 000000000000..ad0552d1efd5 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/src/ConvwatchGUI.form @@ -0,0 +1,286 @@ +<?xml version="1.0" encoding="UTF-8" ?> + +<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JFrameFormInfo"> + <Properties> + <Property name="defaultCloseOperation" type="int" value="3"/> + </Properties> + <SyntheticProperties> + <SyntheticProperty name="formSizePolicy" type="int" value="1"/> + </SyntheticProperties> + <Events> + <EventHandler event="componentResized" listener="java.awt.event.ComponentListener" parameters="java.awt.event.ComponentEvent" handler="formComponentResized"/> + <EventHandler event="propertyChange" listener="java.beans.PropertyChangeListener" parameters="java.beans.PropertyChangeEvent" handler="formPropertyChange"/> + </Events> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" attributes="0"> + <Component id="jPanel5" alignment="0" max="32767" attributes="0"/> + <Component id="jPanel4" alignment="0" max="32767" attributes="0"/> + <Group type="102" alignment="1" attributes="0"> + <Component id="jPanelOriginal" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jPanelReference" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jPanelDifference" max="32767" attributes="0"/> + </Group> + </Group> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="jPanel5" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" attributes="0"> + <Component id="jPanelReference" alignment="1" max="32767" attributes="1"/> + <Component id="jPanelOriginal" alignment="1" max="32767" attributes="1"/> + <Component id="jPanelDifference" alignment="0" max="32767" attributes="1"/> + </Group> + <EmptySpace min="-2" max="-2" attributes="0"/> + <Component id="jPanel4" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Container class="javax.swing.JPanel" name="jPanelOriginal"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> + <TitledBorder title="Picture"/> + </Border> + </Property> + </Properties> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabelOriginalImage" pref="299" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabelOriginalImage" pref="514" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="jLabelOriginalImage"> + </Component> + </SubComponents> + </Container> + <Container class="javax.swing.JPanel" name="jPanelReference"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> + <TitledBorder title="Reference Picture"/> + </Border> + </Property> + </Properties> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabelReferenceImage" pref="299" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabelReferenceImage" pref="514" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="jLabelReferenceImage"> + </Component> + </SubComponents> + </Container> + <Container class="javax.swing.JPanel" name="jPanelDifference"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> + <TitledBorder title="Difference"/> + </Border> + </Property> + </Properties> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabelDifferenceImage" pref="298" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabelDifferenceImage" pref="514" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="jLabelDifferenceImage"> + <Properties> + <Property name="name" type="java.lang.String" value="DifferenceImage" noResource="true"/> + </Properties> + </Component> + </SubComponents> + </Container> + <Container class="javax.swing.JPanel" name="jPanel4"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> + <TitledBorder title="Action"/> + </Border> + </Property> + </Properties> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="jButton2" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jButton3" min="-2" max="-2" attributes="0"/> + <EmptySpace type="separate" max="-2" attributes="0"/> + <Component id="jLabelCurrentPage" min="-2" pref="107" max="-2" attributes="0"/> + <EmptySpace pref="614" max="32767" attributes="0"/> + <Component id="jButton1" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <EmptySpace max="32767" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="jButton1" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jButton2" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jButton3" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="jLabelCurrentPage" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JButton" name="jButton1"> + <Properties> + <Property name="text" type="java.lang.String" value="Close"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton1ActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JButton" name="jButton2"> + <Properties> + <Property name="label" type="java.lang.String" value="prev page"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton2ActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JButton" name="jButton3"> + <Properties> + <Property name="label" type="java.lang.String" value="next page"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton3ActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JLabel" name="jLabelCurrentPage"> + <Properties> + <Property name="text" type="java.lang.String" value="Current page: 1"/> + </Properties> + </Component> + </SubComponents> + </Container> + <Container class="javax.swing.JPanel" name="jPanel5"> + <Properties> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> + <TitledBorder title="Information"/> + </Border> + </Property> + </Properties> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="1" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="1" attributes="0"> + <Component id="jLabel1" alignment="0" pref="972" max="32767" attributes="0"/> + <Component id="jLabelDocumentName" alignment="0" pref="972" max="32767" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabel1" pref="50" max="32767" attributes="0"/> + <EmptySpace min="-2" max="-2" attributes="0"/> + <Component id="jLabelDocumentName" min="-2" pref="19" max="-2" attributes="0"/> + <EmptySpace min="-2" max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="jLabel1"> + <Properties> + <Property name="text" type="java.lang.String" value="<html>Here you see a graphical compare by pictures created with a current running office, a stored reference picture and the difference between those both pictures created by ImageMagicks 'composite'.
</html>" noResource="true"/> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="jLabelDocumentName"> + <Properties> + <Property name="text" type="java.lang.String" value="jLabel2"/> + </Properties> + </Component> + </SubComponents> + </Container> + </SubComponents> +</Form> diff --git a/testgraphical/ui/java/ConvwatchGUIProject/src/ConvwatchGUI.java b/testgraphical/ui/java/ConvwatchGUIProject/src/ConvwatchGUI.java new file mode 100644 index 000000000000..625e7b80c6e0 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/src/ConvwatchGUI.java @@ -0,0 +1,535 @@ + +import java.awt.Dimension; +import java.awt.Image; +import java.io.File; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.SwingWorker; + +/* +************************************************************************** +* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2000, 2010 Oracle and/or its affiliates. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* <http://www.openoffice.org/license.html> +* for a copy of the LGPLv3 License. +* +************************************************************************** + */ + +/* + * Simple windows, which should show differences if there are some + */ + +public class ConvwatchGUI extends javax.swing.JFrame +{ + private ImageIcon[] m_aImageIcon; + private String m_sInifile; + private int m_nMaxPages; + private int m_nCurrentPage; + + /** Creates new form ConvwatchGUI + * @param args + */ + + private ConvwatchGUI(String args[]) + { + if (args.length > 0) + { + if (args[0].endsWith(".ini")) + { + m_sInifile = args[0]; + fillImageIconsFromInifile(); + } + else + { + fillImageIcons(args); + } + } + + String sVersion = System.getProperty("java.version"); + Float f = Float.valueOf(sVersion.substring(0,3)); + if (f.floatValue() < (float)1.6) + { + System.out.println("You need at least Java version 1.6"); + System.exit(1); + } + + initComponents(); + jLabelDocumentName.setText("Document: " + m_sInifile); + } + + void fillImageIconsFromInifile() + { + File aFile = new File(m_sInifile); + if (!aFile.exists()) + { + GlobalLogWriter.println("Inifile '" + m_sInifile + "' not found."); + printUsage(); + System.exit(1); + } + + IniFile aIniFile = new IniFile(aFile); + int nPages = aIniFile.getIntValue("global", "pages", 0); + if (nPages < 1) + { + System.out.println("No pages found."); + } + m_nMaxPages = nPages; + m_nCurrentPage = 1; + fillImageIcons(); + } + + private void fillImageIcons() + { + File aFile = new File(m_sInifile); + IniFile aIniFile = new IniFile(aFile); + String sSection = "page" + m_nCurrentPage; + String[] files = new String[3]; + files[0] = aIniFile.getValue(sSection, "newgfx"); // current created picture + files[1] = aIniFile.getValue(sSection, "oldgfx"); // reference picture + files[2] = aIniFile.getValue(sSection, "diffgfx"); + fillImageIcons(files); + } + + /** + * Give 3 file names + * @param args + */ + private void fillImageIcons(String args[]) + { + boolean bLoadImages = false; + m_aImageIcon = new ImageIcon[3]; + for (int i=0;i<3;i++) + { + if (args.length > i && args[i] != null) + { + File aFile = new File(args[i]); + if (aFile.exists()) + { + // TODO: Load images + // Image aImage = new BufferedImage(100,100, BufferedImage.TYPE_INT_RGB); + // aImage. + m_aImageIcon[i] = new ImageIcon(args[i]); + if (m_aImageIcon[i] != null) + { + bLoadImages = true; + } + } + else + { + System.out.println("Can't read file: " + aFile.getName()); + bLoadImages = false; + } + } + else + { + System.out.println("There is no #" + (i + 1) + " image given."); + bLoadImages = false; + } + } +// if (!bLoadImages) +// { +// printUsage(); +// System.exit(1); +// } + + + + // TODO: Set images. + + // formComponentResized(null); + } + + private void printUsage() + { + System.out.println("Usage:"); + System.out.println(" ConvwatchGUI <pic1> <pic2> <pic3>"); + System.out.println("or ConvwatchGUI <inifile>"); + } + +// private int m_nOldWidth; + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + jPanelOriginal = new javax.swing.JPanel(); + jLabelOriginalImage = new javax.swing.JLabel(); + jPanelReference = new javax.swing.JPanel(); + jLabelReferenceImage = new javax.swing.JLabel(); + jPanelDifference = new javax.swing.JPanel(); + jLabelDifferenceImage = new javax.swing.JLabel(); + jPanel4 = new javax.swing.JPanel(); + jButton1 = new javax.swing.JButton(); + jButton2 = new javax.swing.JButton(); + jButton3 = new javax.swing.JButton(); + jLabelCurrentPage = new javax.swing.JLabel(); + jPanel5 = new javax.swing.JPanel(); + jLabel1 = new javax.swing.JLabel(); + jLabelDocumentName = new javax.swing.JLabel(); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + addComponentListener(new java.awt.event.ComponentAdapter() { + public void componentResized(java.awt.event.ComponentEvent evt) { + formComponentResized(evt); + } + }); + addPropertyChangeListener(new java.beans.PropertyChangeListener() { + public void propertyChange(java.beans.PropertyChangeEvent evt) { + formPropertyChange(evt); + } + }); + + jPanelOriginal.setBorder(javax.swing.BorderFactory.createTitledBorder("Picture")); + + javax.swing.GroupLayout jPanelOriginalLayout = new javax.swing.GroupLayout(jPanelOriginal); + jPanelOriginal.setLayout(jPanelOriginalLayout); + jPanelOriginalLayout.setHorizontalGroup( + jPanelOriginalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanelOriginalLayout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabelOriginalImage, javax.swing.GroupLayout.DEFAULT_SIZE, 299, Short.MAX_VALUE) + .addContainerGap()) + ); + jPanelOriginalLayout.setVerticalGroup( + jPanelOriginalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanelOriginalLayout.createSequentialGroup() + .addComponent(jLabelOriginalImage, javax.swing.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE) + .addContainerGap()) + ); + + jPanelReference.setBorder(javax.swing.BorderFactory.createTitledBorder("Reference Picture")); + + javax.swing.GroupLayout jPanelReferenceLayout = new javax.swing.GroupLayout(jPanelReference); + jPanelReference.setLayout(jPanelReferenceLayout); + jPanelReferenceLayout.setHorizontalGroup( + jPanelReferenceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanelReferenceLayout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabelReferenceImage, javax.swing.GroupLayout.DEFAULT_SIZE, 299, Short.MAX_VALUE) + .addContainerGap()) + ); + jPanelReferenceLayout.setVerticalGroup( + jPanelReferenceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanelReferenceLayout.createSequentialGroup() + .addComponent(jLabelReferenceImage, javax.swing.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE) + .addContainerGap()) + ); + + jPanelDifference.setBorder(javax.swing.BorderFactory.createTitledBorder("Difference")); + + jLabelDifferenceImage.setName("DifferenceImage"); // NOI18N + + javax.swing.GroupLayout jPanelDifferenceLayout = new javax.swing.GroupLayout(jPanelDifference); + jPanelDifference.setLayout(jPanelDifferenceLayout); + jPanelDifferenceLayout.setHorizontalGroup( + jPanelDifferenceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanelDifferenceLayout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabelDifferenceImage, javax.swing.GroupLayout.DEFAULT_SIZE, 298, Short.MAX_VALUE) + .addContainerGap()) + ); + jPanelDifferenceLayout.setVerticalGroup( + jPanelDifferenceLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanelDifferenceLayout.createSequentialGroup() + .addComponent(jLabelDifferenceImage, javax.swing.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE) + .addContainerGap()) + ); + + jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("Action")); + + jButton1.setText("Close"); + jButton1.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton1ActionPerformed(evt); + } + }); + + jButton2.setLabel("prev page"); + jButton2.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton2ActionPerformed(evt); + } + }); + + jButton3.setLabel("next page"); + jButton3.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton3ActionPerformed(evt); + } + }); + + jLabelCurrentPage.setText("Current page: 1"); + + javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); + jPanel4.setLayout(jPanel4Layout); + jPanel4Layout.setHorizontalGroup( + jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup() + .addContainerGap() + .addComponent(jButton2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jButton3) + .addGap(18, 18, 18) + .addComponent(jLabelCurrentPage, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 614, Short.MAX_VALUE) + .addComponent(jButton1) + .addContainerGap()) + ); + jPanel4Layout.setVerticalGroup( + jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jButton1) + .addComponent(jButton2) + .addComponent(jButton3) + .addComponent(jLabelCurrentPage)) + .addContainerGap()) + ); + + jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder("Information")); + + jLabel1.setText("<html>Here you see a graphical compare by pictures created with a current running office, a stored reference picture and the difference between those both pictures created by ImageMagicks 'composite'.\n</html>"); // NOI18N + + jLabelDocumentName.setText("jLabel2"); + + javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5); + jPanel5.setLayout(jPanel5Layout); + jPanel5Layout.setHorizontalGroup( + jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 972, Short.MAX_VALUE) + .addComponent(jLabelDocumentName, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 972, Short.MAX_VALUE)) + .addContainerGap()) + ); + jPanel5Layout.setVerticalGroup( + jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel5Layout.createSequentialGroup() + .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 50, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabelDocumentName, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jPanel5, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanel4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(jPanelOriginal, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jPanelReference, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jPanelDifference, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(jPanelReference, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanelOriginal, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanelDifference, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) + ); + + pack(); + }// </editor-fold>//GEN-END:initComponents + + private boolean bAdd = false; + + private void formComponentResized(java.awt.event.ComponentEvent evt)//GEN-FIRST:event_formComponentResized + {//GEN-HEADEREND:event_formComponentResized + // TODO add your handling code here: + // we need to set icons to null + // if we don't do this, icons can only grow, but not shrink :-( + + initialiseImages(); + } + private void initialiseImages() + { + if (jLabelOriginalImage.getIcon() != null) + { + jLabelOriginalImage.setIcon(null); + jLabelReferenceImage.setIcon(null); + jLabelDifferenceImage.setIcon(null); + + int w = getWidth(); + int h = getHeight(); + if (bAdd) + { + this.setSize(w, h + 1); + bAdd = false; + } + else + { + this.setSize(w, h - 1); + bAdd = true; + } + } + else + { + new ResizeImage(jLabelOriginalImage, m_aImageIcon[0]).execute(); + new ResizeImage(jLabelReferenceImage, m_aImageIcon[1]).execute(); + new ResizeImage(jLabelDifferenceImage, m_aImageIcon[2]).execute(); + } + int dummy=0; + }//GEN-LAST:event_formComponentResized + + private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jButton1ActionPerformed + {//GEN-HEADEREND:event_jButton1ActionPerformed + // TODO add your handling code here: + System.exit(1); + }//GEN-LAST:event_jButton1ActionPerformed + + private void formPropertyChange(java.beans.PropertyChangeEvent evt)//GEN-FIRST:event_formPropertyChange + {//GEN-HEADEREND:event_formPropertyChange + // TODO add your handling code here: + int dummy = 0; + }//GEN-LAST:event_formPropertyChange + + private void jButton2ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jButton2ActionPerformed + {//GEN-HEADEREND:event_jButton2ActionPerformed + // TODO add your handling code here: + int nOldPage = m_nCurrentPage; + if (m_nCurrentPage > 1) + { + m_nCurrentPage--; + } + if (nOldPage != m_nCurrentPage) + { + jLabelCurrentPage.setText("Current page: " + m_nCurrentPage); + fillImageIcons(); + initialiseImages(); + } + }//GEN-LAST:event_jButton2ActionPerformed + + private void jButton3ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jButton3ActionPerformed + {//GEN-HEADEREND:event_jButton3ActionPerformed + // TODO add your handling code here: + int nOldPage = m_nCurrentPage; + if (m_nCurrentPage < m_nMaxPages) + { + m_nCurrentPage++; + } + if (nOldPage != m_nCurrentPage) + { + jLabelCurrentPage.setText("Current page: " + m_nCurrentPage); + fillImageIcons(); + initialiseImages(); + } + }//GEN-LAST:event_jButton3ActionPerformed + + class ResizeImage extends SwingWorker <ImageIcon, Object> + { + private JLabel m_jLabel; + private ImageIcon m_aImageIcon; + private int w; + private int h; + + public ResizeImage(JLabel _aLabel, ImageIcon _aImageIcon) + { + m_jLabel = _aLabel; + m_aImageIcon = _aImageIcon; + w = _aLabel.getWidth(); + h = _aLabel.getHeight(); + } + + // dont access here anything to "Event Swing Thread" + @Override + public ImageIcon doInBackground() + { + Image aImage = m_aImageIcon.getImage().getScaledInstance(w, h, Image.SCALE_AREA_AVERAGING); // SCALE_SMOOTH + final ImageIcon aIcon = new ImageIcon(aImage); + // m_jLabel.setIcon(aIcon); + return aIcon; + } + + @Override + protected void done() + { + try + { + m_jLabel.setIcon(get()); + } + catch (Exception e) + {} + } + + } + + /** + * @param args the command line arguments + */ + public static void main(final String args[]) + { + + // Start GUI + + java.awt.EventQueue.invokeLater(new Runnable() + { + + public void run() + { + ConvwatchGUI aGUI = new ConvwatchGUI(args); + aGUI.setTitle("Graphical Compare"); + aGUI.setPreferredSize(new Dimension(1024, 768)); + + aGUI.setVisible(true); + } + }); + } + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton jButton1; + private javax.swing.JButton jButton2; + private javax.swing.JButton jButton3; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabelCurrentPage; + private javax.swing.JLabel jLabelDifferenceImage; + private javax.swing.JLabel jLabelDocumentName; + private javax.swing.JLabel jLabelOriginalImage; + private javax.swing.JLabel jLabelReferenceImage; + private javax.swing.JPanel jPanel4; + private javax.swing.JPanel jPanel5; + private javax.swing.JPanel jPanelDifference; + private javax.swing.JPanel jPanelOriginal; + private javax.swing.JPanel jPanelReference; + // End of variables declaration//GEN-END:variables +} diff --git a/testgraphical/ui/java/ConvwatchGUIProject/src/IniFile.java b/testgraphical/ui/java/ConvwatchGUIProject/src/IniFile.java new file mode 100644 index 000000000000..20cede5b1c33 --- /dev/null +++ b/testgraphical/ui/java/ConvwatchGUIProject/src/IniFile.java @@ -0,0 +1,718 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +import java.io.File; +import java.io.RandomAccessFile; +import java.util.ArrayList; +import java.util.Enumeration; + + +/** + * Simple implementation of a inifile manager + */ +class GlobalLogWriter +{ + public static void println(String _s) + { + System.out.println(_s); + } +} + +/** + Helper class to give a simple API to read/write windows like ini files +*/ + +/* public */ // is only need, if we need this class outside package convwatch +public class IniFile implements Enumeration +{ + + /** + * internal representation of the ini file content. + * Problem, if ini file changed why other write something difference, we don't realise this. + */ + private String m_sFilename; + // private File m_aFile; + private ArrayList<String> m_aList; + boolean m_bListContainUnsavedChanges = false; + private int m_aEnumerationPos = 0; + + /** + open a ini file by it's name + @param _sFilename string a filename, if the file doesn't exist, a new empty ini file will create. + write back to disk only if there are really changes. + */ + public IniFile(String _sFilename) + { + m_sFilename = _sFilename; + // m_aFile = new File(_sFilename); + m_aList = loadLines(); + m_aEnumerationPos = findNextSection(0); + } + + /** + open a ini file by it's name + @param _aFile a java.io.File object, if the file doesn't exist, a new empty ini file will create. + write back to disk only if there are really changes. + */ + public IniFile(File _aFile) + { + m_sFilename = _aFile.getAbsolutePath(); + m_aList = loadLines(); + m_aEnumerationPos = findNextSection(0); + } + + public void insertFirstComment(String[] _aList) + { + if (m_aList.size() == 0) + { + // can only insert if there is nothing else already in the ini file + for (int i = 0; i < _aList.length; i++) + { + m_aList.add(_aList[i]); + } + } + } + + private ArrayList<String> loadLines() + { + ArrayList<String> aLines = new ArrayList<String>(); + File aFile = new File(m_sFilename); + if (!aFile.exists()) + { + // GlobalLogWriter.println("couldn't find file '" + m_sFilename + "', will be created."); + // DebugHelper.exception(BasicErrorCode.SbERR_FILE_NOT_FOUND, ""); + // m_bListContainUnsavedChanges = false; + return aLines; + } + RandomAccessFile aReader = null; + // BufferedReader aReader; + try + { + aReader = new RandomAccessFile(aFile, "r"); + String aLine = ""; + while (aLine != null) + { + aLine = aReader.readLine(); + if (aLine != null && aLine.length() > 0) + { + aLines.add(aLine); + } + } + } + catch (java.io.FileNotFoundException fne) + { + GlobalLogWriter.println("couldn't open file " + m_sFilename); + GlobalLogWriter.println("Message: " + fne.getMessage()); + // DebugHelper.exception(BasicErrorCode.SbERR_FILE_NOT_FOUND, ""); + } + catch (java.io.IOException ie) + { + GlobalLogWriter.println("Exception occurs while reading from file " + m_sFilename); + GlobalLogWriter.println("Message: " + ie.getMessage()); + // DebugHelper.exception(BasicErrorCode.SbERR_INTERNAL_ERROR, ie.getMessage()); + } + try + { + aReader.close(); + } + catch (java.io.IOException ie) + { + GlobalLogWriter.println("Couldn't close file " + m_sFilename); + GlobalLogWriter.println("Message: " + ie.getMessage()); + // DebugHelper.exception(BasicErrorCode.SbERR_INTERNAL_ERROR, ie.getMessage()); + } + return aLines; + } + + /** + * @return true, if the ini file contain some readable data + */ + public boolean is() + { + return m_aList.size() > 1 ? true : false; + } + + /** + * Check if a given Section and Key exists in the ini file + * @param _sSectionName + * @param _sKey + * @return true if the given Section, Key exists, now you can get the value + */ + public boolean hasValue(String _sSectionName, String _sKey) + { + int n = findKey(_sSectionName, _sKey); + if (n > 0) + { + return true; + } + return false; + } + // ----------------------------------------------------------------------------- + + private boolean isRemark(String _sLine) + { + if (((_sLine.length() < 2)) || + (_sLine.startsWith("#")) || + (_sLine.startsWith(";"))) + { + return true; + } + return false; + } + + private String getItem(int i) + { + return m_aList.get(i); + } + + private String buildSectionName(String _sSectionName) + { + String sFindSection = "[" + _sSectionName + "]"; + return sFindSection; + } + + private String sectionToString(String _sSectionName) + { + String sKeyName = _sSectionName; + if (sKeyName.startsWith("[") && + sKeyName.endsWith("]")) + { + sKeyName = sKeyName.substring(1, sKeyName.length() - 1); + } + return sKeyName; + } + + private String toLowerIfNeed(String _sName) + { + return _sName.toLowerCase(); + } + + // return the number where this section starts + private int findSection(String _sSection) + { + String sFindSection = toLowerIfNeed(buildSectionName(_sSection)); + // ----------- find _sSection --------------- + int i; + for (i = 0; i < m_aList.size(); i++) + { + String sLine = toLowerIfNeed(getItem(i).trim()); + if (isRemark(sLine)) + { + continue; + } + if (sFindSection.equals("[]")) + { + // special case, empty Section. + return i - 1; + } + if (sLine.startsWith(sFindSection)) + { + return i; + } + } + return -1; + } + + /** + * Checks if a given section exists in the ini file + * @param _sSection + * @return true if the given _sSection was found + */ + public boolean hasSection(String _sSection) + { + int i = findSection(_sSection); + if (i == -1) + { + return false; + } + return true; + } + + // return the line number, where the key is found. + private int findKey(String _sSection, String _sKey) + { + int i = findSection(_sSection); + if (i == -1) + { + // Section not found, therefore the value can't exist + return -1; + } + return findKeyFromKnownSection(i, _sKey); + } + + // i must be the index in the list, where the well known section starts + private int findKeyFromKnownSection(int _nSectionIndex, String _sKey) + { + _sKey = toLowerIfNeed(_sKey); + for (int j = _nSectionIndex + 1; j < m_aList.size(); j++) + { + String sLine = getItem(j).trim(); + + if (isRemark(sLine)) + { + continue; + } + if (sLine.startsWith("[") /* && sLine.endsWith("]") */) + { + // TODO: due to the fact we would like to insert an empty line before new sections + // TODO: we should check if we are in an empty line and if, go back one line. + + // found end. + break; + } + + int nEqual = sLine.indexOf("="); + if (nEqual >= 0) + { + String sKey = toLowerIfNeed(sLine.substring(0, nEqual).trim()); + if (sKey.equals(_sKey)) + { + return j; + } + } + } + return -1; + } + + // i must be the index in the list, where the well known section starts + private int findLastKnownKeyIndex(int _nSectionIndex, String _sKey) + { + _sKey = toLowerIfNeed(_sKey); + int i = _nSectionIndex + 1; + for (int j = i; j < m_aList.size(); j++) + { + String sLine = getItem(j).trim(); + + if (isRemark(sLine)) + { + continue; + } + + if (sLine.startsWith("[") /* && sLine.endsWith("]") */) + { + // found end. + return j; + } + + int nEqual = sLine.indexOf("="); + if (nEqual >= 0) + { + String sKey = toLowerIfNeed(sLine.substring(0, nEqual).trim()); + if (sKey.equals(_sKey)) + { + return j; + } + } + } + return i; + } + + private String getValue(int _nIndex) + { + String sLine = getItem(_nIndex).trim(); + if (isRemark(sLine)) + { + return ""; + } + int nEqual = sLine.indexOf("="); + if (nEqual >= 0) + { + String sKey = sLine.substring(0, nEqual).trim(); + String sValue = sLine.substring(nEqual + 1).trim(); + return sValue; + } + return ""; + } + + /** + @param _sSection string + @param _sKey string + @return the value found in the inifile which is given by the section and key parameter + */ + // private int m_nCurrentPosition; + // private String m_sOldKey; + public String getValue(String _sSection, String _sKey) + { + String sValue = ""; + int m_nCurrentPosition = findKey(_sSection, _sKey); + if (m_nCurrentPosition == -1) + { + // Section not found, therefore the value can't exist + return ""; + } + + // m_sOldKey = _sKey; + sValue = getValue(m_nCurrentPosition); + + return sValue; + } + +// private String getNextValue() +// { +// if (m_nCurrentPosition >= 0) +// { +// ++m_nCurrentPosition; +// String sValue = getValue(m_nCurrentPosition); +// return sValue; +// } +// return ""; +// } + /** + * Returns the value at Section, Key converted to an integer + * Check with hasValue(Section, Key) to check before you get into trouble. + * @param _sSection + * @param _sKey + * @param _nDefault if there is a problem, key not found... this value will return + * @return the value as integer if possible to convert, if not return default value. + */ + public int getIntValue(String _sSection, String _sKey, int _nDefault) + { + String sValue = getValue(_sSection, _sKey); + int nValue = _nDefault; + if (sValue.length() > 0) + { + try + { + nValue = Integer.valueOf(sValue).intValue(); + } + catch (java.lang.NumberFormatException e) + { + GlobalLogWriter.println("IniFile.getIntValue(): Caught a number format exception, return the default value."); + } + } + return nValue; + } + +/** + * close a open inifile. + * If there are changes, all changes will store back to disk. + */ + public void close() + { + store(); + } + + /** + write back the ini file to the disk, only if there exist changes + * @deprecated use close() instead! + */ + + // TODO: make private + private void store() + { + if (m_bListContainUnsavedChanges == false) + { + // nothing has changed, so no need to store + return; + } + + File aFile = new File(m_sFilename); + if (aFile.exists()) + { + // System.out.println("couldn't find file " + m_sFilename); + // TODO: little bit unsafe here, first rename, after write is complete, delete the old. + aFile.delete(); + if (aFile.exists()) + { + GlobalLogWriter.println("Couldn't delete the file " + m_sFilename); + return; + // DebugHelper.exception(BasicErrorCode.SbERR_INTERNAL_ERROR, "Couldn't delete the file " + m_sFilename); + } + } + // if (! aFile.canWrite()) + // { + // System.out.println("Couldn't write to file " + m_sFilename); + // DebugHelper.exception(BasicErrorCode.SbERR_INTERNAL_ERROR, ""); + // } + try + { + RandomAccessFile aWriter = new RandomAccessFile(aFile, "rw"); + for (int i = 0; i < m_aList.size(); i++) + { + String sLine = getItem(i); + if (sLine.startsWith("[")) + { + // write an extra empty line before next section. + aWriter.writeByte((int) '\n'); + } + aWriter.writeBytes(sLine); + aWriter.writeByte((int) '\n'); + } + aWriter.close(); + } + catch (java.io.FileNotFoundException fne) + { + GlobalLogWriter.println("couldn't open file for writing " + m_sFilename); + GlobalLogWriter.println("Message: " + fne.getMessage()); + // DebugHelper.exception(BasicErrorCode.SbERR_FILE_NOT_FOUND, ""); + } + catch (java.io.IOException ie) + { + GlobalLogWriter.println("Exception occurs while writing to file " + m_sFilename); + GlobalLogWriter.println("Message: " + ie.getMessage()); + // DebugHelper.exception(BasicErrorCode.SbERR_INTERNAL_ERROR, ie.getMessage()); + } + } + + public void insertValue(String _sSection, String _sKey, int _nValue) + { + insertValue(_sSection, _sKey, String.valueOf(_nValue)); + } + + public void insertValue(String _sSection, String _sKey, long _nValue) + { + insertValue(_sSection, _sKey, String.valueOf(_nValue)); + } + + /** + insert a value + there are 3 cases + 1. section doesn't exist, goto end and insert a new section, insert a new key value pair + 2. section exist but key not, search section, search key, if key is -1 get last known key position and insert new key value pair there + 3. section exist and key exist, remove the old key and insert the key value pair at the same position + * @param _sSection + * @param _sKey + * @param _sValue + */ + public void insertValue(String _sSection, String _sKey, String _sValue) + { + int i = findSection(_sSection); + if (i == -1) + { + // case 1: section doesn't exist + String sFindSection = buildSectionName(_sSection); + + // TODO: before create a new Section, insert a empty line + m_aList.add(sFindSection); + if (_sKey.length() > 0) + { + String sKeyValuePair = _sKey + "=" + _sValue; + m_aList.add(sKeyValuePair); + } + m_bListContainUnsavedChanges = true; + return; + } + int j = findKeyFromKnownSection(i, _sKey); + if (j == -1) + { + // case 2: section exist, but not the key + j = findLastKnownKeyIndex(i, _sKey); + if (_sKey.length() > 0) + { + String sKeyValuePair = _sKey + "=" + _sValue; + m_aList.add(j, sKeyValuePair); + m_bListContainUnsavedChanges = true; + } + return; + } + else + { + // case 3: section exist, and also the key + String sKeyValuePair = _sKey + "=" + _sValue; + m_aList.set(j, sKeyValuePair); + m_bListContainUnsavedChanges = true; + } + } + // ----------------------------------------------------------------------------- + // String replaceEvaluatedValue(String _sSection, String _sValue) + // { + // String sValue = _sValue; + // int nIndex = 0; + // while (( nIndex = sValue.indexOf("$(", nIndex)) >= 0) + // { + // int nNextIndex = sValue.indexOf(")", nIndex); + // if (nNextIndex >= 0) + // { + // String sKey = sValue.substring(nIndex + 2, nNextIndex); + // String sNewValue = getValue(_sSection, sKey); + // if (sNewValue != null && sNewValue.length() > 0) + // { + // String sRegexpKey = "\\$\\(" + sKey + "\\)"; + // sValue = sValue.replaceAll(sRegexpKey, sNewValue); + // } + // nIndex = nNextIndex; + // } + // else + // { + // nIndex += 2; + // } + // } + // return sValue; + // } + // ----------------------------------------------------------------------------- + + // public String getLocalEvaluatedValue(String _sSection, String _sKey) + // { + // String sValue = getValue(_sSection, _sKey); + // sValue = replaceEvaluatedValue(_sSection, sValue); + // return sValue; + // } + + // ----------------------------------------------------------------------------- + + // this is a special behaviour. + // public String getGlobalLocalEvaluatedValue(String _sSection, String _sKey) + // { + // String sGlobalValue = getKey("global", _sKey); + // String sLocalValue = getKey(_sSection, _sKey); + // if (sLocalValue.length() == 0) + // { + // sGlobalValue = replaceEvaluatedKey(_sSection, sGlobalValue); + // sGlobalValue = replaceEvaluatedKey("global", sGlobalValue); + // return sGlobalValue; + // } + // sLocalValue = replaceEvaluatedKey(_sSection, sLocalValue); + // sLocalValue = replaceEvaluatedKey("global", sLocalValue); + // + // return sLocalValue; + // } + public void removeSection(String _sSectionToRemove) + { + // first, search for the name + int i = findSection(_sSectionToRemove); + if (i == -1) + { + // Section to remove not found, do nothing. + return; + } + // second, find the next section + int j = findNextSection(i + 1); + if (j == -1) + { + // if we are at the end, use size() as second section + j = m_aList.size(); + } + // remove all between first and second section + for (int k = i; k < j; k++) + { + m_aList.remove(i); + } + // mark the list as changed + m_bListContainUnsavedChanges = true; + } + + /** + * some tests for this class + */ +// public static void main(String[] args) +// { +// String sTempFile = System.getProperty("java.io.tmpdir"); +// sTempFile += "inifile"; +// +// +// IniFile aIniFile = new IniFile(sTempFile); +// String sValue = aIniFile.getValue("Section", "Key"); +// // insert a new value to a already exist section +// aIniFile.insertValue("Section", "Key2", "a new value in a existing section"); +// // replace a value +// aIniFile.insertValue("Section", "Key", "replaced value"); +// // create a new value +// aIniFile.insertValue("New Section", "Key", "a new key value pair"); +// aIniFile.insertValue("New Section", "Key2", "a new second key value pair"); +// +// String sValue2 = aIniFile.getValue("Section2", "Key"); +// +// aIniFile.removeSection("Section"); +// aIniFile.removeSection("New Section"); +// +// aIniFile.close(); +// } + + /** + * Enumeration Interface + * @return true, if there are more Key values + */ + public boolean hasMoreElements() + { + if (m_aEnumerationPos >= 0 && + m_aEnumerationPos < m_aList.size()) + { + return true; + } + return false; + } + + /** + * Find the next line, which starts with '[' + * @param i start position + * @return the line where '[' found or -1 + */ + private int findNextSection(int i) + { + if (i >= 0) + { + while (i < m_aList.size()) + { + String sLine = m_aList.get(i); + if (sLine.startsWith("[")) + { + return i; + } + i++; + } + } + return -1; + } + + /** + * Enumeration Interface + * @return a key without the enveloped '[' ']' + */ + public Object nextElement() + { + int nLineWithSection = findNextSection(m_aEnumerationPos); + if (nLineWithSection != -1) + { + String sSection = m_aList.get(nLineWithSection); + m_aEnumerationPos = findNextSection(nLineWithSection + 1); + sSection = sectionToString(sSection); + return sSection; + } + else + { + m_aEnumerationPos = m_aList.size(); + } + return null; + } + + /** + * Helper to count the occurence of Sections + * @return returns the count of '^['.*']$' Elements + */ + public int getElementCount() + { + int nCount = 0; + int nPosition = 0; + while ((nPosition = findNextSection(nPosition)) != -1) + { + nCount++; + nPosition++; + } + return nCount; + } +} + diff --git a/testgraphical/ui/java/makefile.mk b/testgraphical/ui/java/makefile.mk new file mode 100644 index 000000000000..134787a17a08 --- /dev/null +++ b/testgraphical/ui/java/makefile.mk @@ -0,0 +1,53 @@ +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +PRJ=..$/.. + +PRJNAME=gfxcmp_ui_java +TARGET=notargetyet + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk + +.IF "$(SHOW)" == "" +nothing .PHONY: + +.ELSE + +# PERLDEBUG=-d:ptkdb +ALLTAR: + $(COPY) ConvwatchGUIProject$/dist/ConvwatchGUIProject.jar $(CLASSDIR) + +.END + +.INCLUDE : $(PRJ)$/util$/makefile.pmk + diff --git a/testgraphical/util/makefile.pmk b/testgraphical/util/makefile.pmk new file mode 100644 index 000000000000..98b94dca0779 --- /dev/null +++ b/testgraphical/util/makefile.pmk @@ -0,0 +1,34 @@ +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +# this file will include by other makefiles only + +demo: ALLTAR +selftest: ALLTAR +failtest: ALLTAR + +clean: clean_all |