'encoding UTF-8 Do not remove or change this line! '************************************************************************** ' 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 ' ' for a copy of the LGPLv3 License. ' '/************************************************************************ '* '* owner : joerg.skottke@oracle.com '* '* short description : Functions that work with files like deleting, loading... '* '\****************************************************************************** function hHandleActivesOnLoad( iTries as integer , iAdd as integer ) as boolean '///

Handle any dialogs that might pop up when loading a file

'///Beware: This function gives only limited control over the dialogs closed, '///+ it just closes anything it can.
'///Please refer to the inline documentation for further details
'///Input: '///
    '///+
  1. Number of dialogs to be closed (integer)
  2. '/// '///+
  3. Additional dialogs (integer).
  4. '/// '///
'///Returns: '///
    '///+
  1. Errorcondition (boolean)
  2. '/// '///
'///Description: '/// use "global/tools/includes/optional/t_stringtools.inc" const CFN = "hHandleActivesOnLoad::" dim iTry as integer dim iActives as integer dim cMessage as string dim bSkip as boolean if ( GVERBOSE ) then printlog( CFN & "Enter" ) ' not good but apparently required - else hDestroyDocument will handle the ' dialogs and warn about them. ' think positive: preset the returnvalue with "true" hHandleActivesOnLoad() = true for iTry = 1 to iTries + iAdd ' handle three possible dialogs: ' 1. The warning that the user should create a new document based ' on this Sample/Template (the document is write protected) ' 2. The question to update links to the internet. Note: If you ' use proxies, they must be set correctly otherwise the result ' is undefined. ' 3. Some weird usage information dialog which is an active with just ' one OK button. ' Although this works quite well, there is a flaw that we will not ' get information about an "active" dialog that cannot be closed by ' .yes() or .ok(). If this happens, we probably run into an error kontext "Active" try if ( active.exists( 1 ) ) then iActives = iActives + 1 cMessage = hRemoveLineBreaks( active.getText() ) printlog( CFN & "MSG (" & iActives & "): " & cMessage ) printlog( CFN & "Ressource type is: " & Active.getRT() ) printlog( CFN & "Buttoncount is: " & Active.getButtonCount() ) bSkip = false ' ok to create a new document try active.cancel() printlog( CFN & "MSG (" & iActives & "): closed with Cancel" ) bSkip = true catch printlog( CFN & "Missed - this dialog has no Cancel button (create new document)" ) active.ok() endcatch if ( not bSkip ) then if ( Active.getRT() = 304 ) then if ( Active.getButtonCount() = 1 ) then active.ok() printlog( CFN & "MSG (" & iActives & "): closed with OK" ) bSkip = true endif else endif endif if ( not bSkip ) then ' no to update links try active.no() printlog( CFN & "MSG (" & iActives & "): closed with NO" ) catch printlog( CFN & "Missed - this dialog has no NO button (update links)" ) endcatch endif endif catch kontext "Active" if ( Active.exists( 1 ) ) then if ( Active.getButtonCount() = 2 ) then printlog( CFN & " or " ) active.yes() hFileWait( FALSE ) kontext "Active" if ( Active.exists( 2 ) ) then qaerrorlog( "#105670# - File corruption warning, the template is broken" ) qaerrorlog( CFN & "Trying to recover." ) Active.ok() hHandleActivesOnLoad() = FALSE exit function endif endif endif qaerrorlog( "Problem while trying to handle messageboxes" ) hHandleActivesOnLoad() = false endcatch next iTry ' now see how many dialogs were allowed and how many have been closed ' this does not change the return value of the function if ( iActives > iTries ) then printlog( CFN & "Exit: The test closed more dialogs than expected" ) hHandleActivesOnLoad() = false else if ( GVERBOSE ) then printlog( CFN & "Exit" ) endif end function '******************************************************************************* function hHandleInitialDialogs() as integer const CFN = "hHandleInitialDialogs::" '///

Handle dialogs while opening samples/templates etc.

'///The returnvalue is of limited use
'///Input: '///
    '///+
  1. Nothing
  2. '///
'///Returns: '///
    '///+
  1. Id of the dialog (integer)
  2. '///
      '///+
    • 0: No dialog was found
    • '///+
    • 1: UseOfThisTemplate
    • '///+
    • 2: StarOfficeCalendar1
    • '///+
    • 3: NewsletterLayout
    • '///+
    • 4: PortfolioCurrency
    • '///+
    • 5: StarOfficeCalendar2
    • '///
    '///
'///Description: '///
    ' NOTE: The ID of the dialog will be returned but is of limited use ' Function returns 0 if no dialogs have been encountered dim incident as integer incident = 0 if ( GVERBOSE ) then printlog( CFN & "Enter" ) try '///+
  • Test for UseOfThisTemplate-dialog
  • Kontext "UseOfThisTemplate" if ( UseOfThisTemplate.Exists() ) then printlog( CFN & "Closing UseOfThisTemplate-dialog" ) incident = 1 CancelButton.Click() endif '///+
  • Test for StarOfficeCalendar1-dialog
  • Kontext "StarOfficeCalendar1" if ( StarOfficeCalendar1.Exists() ) then printlog( CFN & "Closing StarOfficeCalendar1-dialog" ) incident = 2 Cancel.Click() endif '///+
  • Test for StarOfficeCalendar2-dialog (This should be idential to StarofficeCalendar1)
  • Kontext "StarOfficeCalendar2" if ( StarOfficeCalendar2.Exists() ) then printlog( CFN & "Closing StarOfficeCalendar2-dialog" ) incident = 5 Cancel.Click() endif '///+
  • Test for NewsletterLayout-dialog
  • Kontext "NewsletterLayout" if ( NewsletterLayout.Exists() ) then printlog( CFN & "Closing NewsletterLayout-dialog" ) incident = 3 OkButton.Click() endif '///+
  • Test for PortfolioCurrency-dialog
  • Kontext "PortfolioCurrency" if ( PortfolioCurrency.Exists() ) then printlog( CFN & "Closing PortfolioCurrency-dialog" ) incident = 4 OKButton.Click() endif catch endcatch hHandleInitialDialogs() = incident if ( GVERBOSE ) then printlog( CFN & "Exit" ) '///
end function '******************************************************************************* function hGetWorkPath() as string '///

Retrieve the users work directory

'///Uses: Call to UNO service
'///Errorhandling: Fixes "$(user)"-type path (uses fallback)
'///Errorhandling: Handles broken UNO connection (uses fallback)
'///Input: '///
    '///+
  1. Nothing
  2. '///
'///Returns: '///
    '///+
  1. Path to local workdir (string)
  2. '///
      '///+
    • Includes trailing slash/backslash
    • '///
    '///
'///Description: '///
    dim sPath as string dim sDefaultPath as string sDefaultPath = convertpath( gOfficePath & "user/work" ) dim oOfficeConnect as object dim oOfficeConfig as object dim bPathIsFromAPI as boolean const CFN = "hGetWorkPath::" '///+
  • Create an UNO service and ask it for the location of "Work"
  • try oOfficeConnect = hGetUnoService( true ) oOfficeConfig = oOfficeConnect.createInstance( "com.sun.star.util.PathSettings" ) sPath = convertFromURL( oOfficeConfig.Work ) bPathIsFromAPI = true catch '///+
  • Handle broken UNO connection
  • printlog( CFN & "Could not access service, connection broken?" ) sPath = "" bPathIsFromAPI = false endcatch '///+
  • If the path differs from the default do a warnlog
  • if ( sPath <> sDefaultPath ) then printlog( CFN & "Default path is: " & sDefaultPath ) printlog( CFN & "Workpath is not defaultpath: " & sPath ) printlog( CFN & "Overriding UNO path" ) sPath = convertpath( gOfficePath & "user\work" ) bPathIsFromAPI = false endif '///+
  • Apply fallback in case of broken connection or invalid path
  • if ( instr( sPath , "$(user)" ) > 0 ) then printlog( CFN & "sPath has $(user)-type string, using fallback" ) sPath = sDefaultPath bPathIsFromAPI = false endif '///+
  • Add trailing pathseparator, do convertpath
  • sPath = sPath & "/" sPath = convertpath( sPath ) '///+
  • Print info to the log and return the path
  • if ( GVERBOSE ) then if ( bPathIsFromAPI ) then printlog( CFN & "(From API): " & sPath ) else qaerrorlog( CFN & "(Junked API-Path): " & sPath ) endif endif hGetWorkPath() = sPath '///
end function '******************************************************************************* function hGetFileSizeAsLong( cFileName as string ) as long '///

Get the size (long) of a file

'///Input: '///
    '///+
  1. Filename (string)
  2. '///
'///Returns: '///
    '///+
  1. Size of file (long)
  2. '///
'///Description: '///
    const CFN = "hGetFileSizeAsLong::" ' This function returns the size of a specified file. If it is a directory, ' the size will default to -1 (A filesize can never be <0 - hopefully) dim iAttrib as integer '///+
  • Verify that the given file exists
  • if ( app.dir( cFileName ) <> "" ) then try iAttrib = getattr( cFileName ) '///+
  • Return the size for a file or -1 for a directory
  • if ( iAttrib <> 16 and iAttrib <> 17 ) then hGetFileSizeAsLong() = filelen( cFileName ) else hGetFileSizeAsLong() = -1 endif catch qaerrorlog( CFN & "File was not handled correctly: " & cFileName ) hGetFileSizeAsLong() = 0 endcatch else '///+
  • Return a size of 0 if the file was not found
  • hGetFileSizeAsLong() = 0 warnlog( CFN & "File does not exist: " & cFileName ) endif '///
end function '******************************************************************************* function hGetWorkFile( cFileName as string ) as string '///

Returns a fully qualified filename to a workfile

'///Input: '///
    '///+
  1. Filename without path (string)
  2. '///
'///Returns: '///
    '///+
  1. Filename including path to user work directory (string)
  2. '///
'///Description: '///
    '///+
  • Concatenate workpath and filename, convertpath
  • hGetWorkFile() = convertpath( hGetWorkPath() & cFileName ) '///
end function