summaryrefslogtreecommitdiffstats
path: root/wizards/source/sfdatabases/SF_Register.xba
diff options
context:
space:
mode:
Diffstat (limited to 'wizards/source/sfdatabases/SF_Register.xba')
-rw-r--r--wizards/source/sfdatabases/SF_Register.xba195
1 files changed, 195 insertions, 0 deletions
diff --git a/wizards/source/sfdatabases/SF_Register.xba b/wizards/source/sfdatabases/SF_Register.xba
new file mode 100644
index 000000000..c9b3f03d7
--- /dev/null
+++ b/wizards/source/sfdatabases/SF_Register.xba
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
+<script:module xmlns:script="http://openoffice.org/2000/script" script:name="SF_Register" script:language="StarBasic" script:moduleType="normal">REM =======================================================================================================================
+REM === The ScriptForge library and its associated libraries are part of the LibreOffice project. ===
+REM === The SFDatabases library is one of the associated libraries. ===
+REM === Full documentation is available on https://help.libreoffice.org/ ===
+REM =======================================================================================================================
+
+Option Compatible
+Option Explicit
+
+&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;
+&apos;&apos;&apos; SF_Register
+&apos;&apos;&apos; ===========
+&apos;&apos;&apos; The ScriptForge framework includes
+&apos;&apos;&apos; the master ScriptForge library
+&apos;&apos;&apos; a number of &quot;associated&quot; libraries SF*
+&apos;&apos;&apos; any user/contributor extension wanting to fit into the framework
+&apos;&apos;&apos;
+&apos;&apos;&apos; The main methods in this module allow the current library to cling to ScriptForge
+&apos;&apos;&apos; - RegisterScriptServices
+&apos;&apos;&apos; Register the list of services implemented by the current library
+&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;
+
+REM ================================================================== EXCEPTIONS
+
+Private Const BASEDOCUMENTOPENERROR = &quot;BASEDOCUMENTOPENERROR&quot;
+
+REM ============================================================== PUBLIC METHODS
+
+REM -----------------------------------------------------------------------------
+Public Sub RegisterScriptServices() As Variant
+&apos;&apos;&apos; Register into ScriptForge the list of the services implemented by the current library
+&apos;&apos;&apos; Each library pertaining to the framework must implement its own version of this method
+&apos;&apos;&apos;
+&apos;&apos;&apos; It consists in successive calls to the RegisterService() and RegisterEventManager() methods
+&apos;&apos;&apos; with 2 arguments:
+&apos;&apos;&apos; ServiceName: the name of the service as a case-insensitive string
+&apos;&apos;&apos; ServiceReference: the reference as an object
+&apos;&apos;&apos; If the reference refers to a module, then return the module as an object:
+&apos;&apos;&apos; GlobalScope.Library.Module
+&apos;&apos;&apos; If the reference is a class instance, then return a string referring to the method
+&apos;&apos;&apos; containing the New statement creating the instance
+&apos;&apos;&apos; &quot;libraryname.modulename.function&quot;
+
+ With GlobalScope.ScriptForge.SF_Services
+ .RegisterService(&quot;Database&quot;, &quot;SFDatabases.SF_Register._NewDatabase&quot;) &apos; Reference to the function initializing the service
+ .RegisterService(&quot;DatabaseFromDocument&quot;, &quot;SFDatabases.SF_Register._NewDatabaseFromSource&quot;)
+ End With
+
+End Sub &apos; SFDatabases.SF_Register.RegisterScriptServices
+
+REM =========================================================== PRIVATE FUNCTIONS
+
+REM -----------------------------------------------------------------------------
+Public Function _NewDatabase(Optional ByVal pvArgs As Variant) As Object
+&apos;&apos;&apos; Create a new instance of the SF_Database class
+&apos; Args:
+&apos;&apos;&apos; FileName : the name of the file (compliant with the SF_FileSystem.FileNaming notation)
+&apos;&apos;&apos; RegistrationName: mutually exclusive with FileName. Used when database is registered
+&apos;&apos;&apos; ReadOnly : (boolean). Default = True
+&apos;&apos;&apos; User : connection parameters
+&apos;&apos;&apos; Password
+&apos;&apos;&apos; Returns:
+&apos;&apos;&apos; The instance or Nothing
+&apos;&apos;&apos; Exceptions:
+&apos;&apos;&apos; BASEDOCUMENTOPENERROR The database file could not be opened or connected
+
+Dim oDatabase As Object &apos; Return value
+Dim vFileName As Variant &apos; alias of pvArgs(0)
+Dim vRegistration As Variant &apos; Alias of pvArgs(1)
+Dim vReadOnly As Variant &apos; Alias of pvArgs(2)
+Dim vUser As Variant &apos; Alias of pvArgs(3)
+Dim vPassword As Variant &apos; Alias of pvArgs(4)
+Dim oDBContext As Object &apos; com.sun.star.sdb.DatabaseContext
+Const cstService = &quot;SFDatabases.Database&quot;
+Const cstGlobal = &quot;GlobalScope&quot;
+
+ If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
+
+Check:
+ If IsMissing(pvArgs) Or IsEmpty(pvArgs) Then pvArgs = Array()
+ If UBound(pvArgs) &gt;= 0 Then vFileName = pvArgs(0) Else vFileName = &quot;&quot;
+ If IsEmpty(vFileName) Then vFileName = &quot;&quot;
+ If UBound(pvArgs) &gt;= 1 Then vRegistration = pvArgs(1) Else vRegistration = &quot;&quot;
+ If IsEmpty(vRegistration) Then vRegistration = &quot;&quot;
+ If UBound(pvArgs) &gt;= 2 Then vReadOnly = pvArgs(2) Else vReadOnly = True
+ If IsEmpty(vReadOnly) Then vReadOnly = True
+ If UBound(pvArgs) &gt;= 3 Then vUser = pvArgs(3) Else vUser = &quot;&quot;
+ If IsEmpty(vUser) Then vUser = &quot;&quot;
+ If UBound(pvArgs) &gt;= 4 Then vPassword = pvArgs(4) Else vPassword = &quot;&quot;
+ If IsEmpty(vPassword) Then vPassword = &quot;&quot;
+ If Not ScriptForge.SF_Utils._Validate(vFileName, &quot;FileName&quot;, V_STRING) Then GoTo Finally
+ If Not ScriptForge.SF_Utils._Validate(vRegistration, &quot;RegistrationName&quot;, V_STRING) Then GoTo Finally
+ If Not ScriptForge.SF_Utils._Validate(vReadOnly, &quot;ReadOnly&quot;, ScriptForge.V_BOOLEAN) Then GoTo Finally
+ If Not ScriptForge.SF_Utils._Validate(vUser, &quot;User&quot;, V_STRING) Then GoTo Finally
+ If Not ScriptForge.SF_Utils._Validate(vPassword, &quot;Password&quot;, V_STRING) Then GoTo Finally
+ Set oDatabase = Nothing
+
+ &apos; Check the existence of FileName
+ With ScriptForge
+ Set oDBContext = .SF_Utils._GetUNOService(&quot;DatabaseContext&quot;)
+ If Len(vFileName) = 0 Then &apos; FileName has precedence over RegistrationName
+ If Len(vRegistration) = 0 Then GoTo CatchError
+ If Not oDBContext.hasRegisteredDatabase(vRegistration) Then GoTo CatchError
+ vFileName = .SF_FileSystem._ConvertFromUrl(oDBContext.getDatabaseLocation(vRegistration))
+ End If
+ If Not .SF_FileSystem.FileExists(vFileName) Then GoTo CatchError
+ End With
+
+Try:
+ &apos; Create the database Basic object and initialize attributes
+ Set oDatabase = New SF_Database
+ With oDatabase
+ Set .[Me] = oDatabase
+ ._Location = ConvertToUrl(vFileName)
+ Set ._DataSource = oDBContext.getByName(._Location)
+ Set ._Connection = ._DataSource.getConnection(vUser, vPassword)
+ ._ReadOnly = vReadOnly
+ Set ._MetaData = ._Connection.MetaData
+ ._URL = ._MetaData.URL
+ End With
+
+Finally:
+ Set _NewDatabase = oDatabase
+ Exit Function
+Catch:
+ GoTo Finally
+CatchError:
+ ScriptForge.SF_Exception.RaiseFatal(BASEDOCUMENTOPENERROR, &quot;FileName&quot;, vFileName, &quot;RegistrationName&quot;, vRegistration)
+ GoTo Finally
+End Function &apos; SFDatabases.SF_Register._NewDatabase
+
+REM -----------------------------------------------------------------------------
+Public Function _NewDatabaseFromSource(Optional ByVal pvArgs As Variant) As Object
+&apos; ByRef poDataSource As Object _
+&apos; , ByVal psUser As String _
+&apos; , ByVal psPassword As String _
+&apos; ) As Object
+&apos;&apos;&apos; Create a new instance of the SF_Database class from the given datasource
+&apos;&apos;&apos; established in the SFDocuments.Base service
+&apos;&apos;&apos; THIS SERVICE MUST NOT BE CALLED FROM A USER SCRIPT
+&apos; Args:
+&apos;&apos;&apos; DataSource: com.sun.star.sdbc.XDataSource
+&apos;&apos;&apos; User, Password : connection parameters
+&apos;&apos;&apos; Returns:
+&apos;&apos;&apos; The instance or Nothing
+&apos;&apos;&apos; Exceptions:
+&apos;&apos;&apos; managed in the calling routines when Nothing is returned
+
+Dim oDatabase As Object &apos; Return value
+Dim oConnection As Object &apos; com.sun.star.sdbc.XConnection
+Dim oDataSource As Object &apos; Alias of pvArgs(0)
+Dim sUser As String &apos; Alias of pvARgs(1)
+Dim sPassword As String &apos; Alias of pvARgs(2)
+
+ If ScriptForge.SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
+ Set oDatabase = Nothing
+
+Try:
+ &apos; Get arguments
+ Set oDataSource = pvArgs(0)
+ sUser = pvArgs(1)
+ sPassword = pvArgs(2)
+
+ &apos; Setup the connection
+ If oDataSource.IsPasswordRequired Then
+ Set oConnection = oDataSource.getConnection(sUser, sPassword)
+ Else
+ Set oConnection = oDataSource.getConnection(&quot;&quot;, &quot;&quot;)
+ End If
+
+ &apos; Create the database Basic object and initialize attributes
+ If Not IsNull(oConnection) Then
+ Set oDatabase = New SF_Database
+ With oDatabase
+ Set .[Me] = oDatabase
+ ._Location = &quot;&quot;
+ Set ._DataSource = oDataSource
+ Set ._Connection = oConnection
+ ._ReadOnly = oConnection.isReadOnly()
+ Set ._MetaData = oConnection.MetaData
+ ._URL = ._MetaData.URL
+ End With
+ End If
+
+Finally:
+ Set _NewDatabaseFromSource = oDatabase
+ Exit Function
+Catch:
+ GoTo Finally
+End Function &apos; SFDatabases.SF_Register._NewDatabaseFromSource
+
+REM ============================================== END OF SFDATABASES.SF_REGISTER
+</script:module> \ No newline at end of file