<?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="defreg_NestedRegistry" script:language="StarBasic">


'*************************************************************************
'
'  Licensed to the Apache Software Foundation (ASF) under one
'  or more contributor license agreements.  See the NOTICE file
'  distributed with this work for additional information
'  regarding copyright ownership.  The ASF licenses this file
'  to you under the Apache License, Version 2.0 (the
'  "License"); you may not use this file except in compliance
'  with the License.  You may obtain a copy of the License at
'  
'    http://www.apache.org/licenses/LICENSE-2.0
'  
'  Unless required by applicable law or agreed to in writing,
'  software distributed under the License is distributed on an
'  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
'  KIND, either express or implied.  See the License for the
'  specific language governing permissions and limitations
'  under the License.
'
'*************************************************************************





' Be sure that all variables are dimensioned:
option explicit


' REQUIRED VARIABLES for interface/service tests:

' Requiered for  com.sun.star.lang.XInitialization
Global aInitArgs As Variant

Global oReg1 As Object
Global oReg2 As Object


Sub CreateObj()

'*************************************************************************
' COMPONENT: 
' defreg.NestedRegistry
'*************************************************************************
On Error Goto ErrHndl
    Dim cURL1 As String
    Dim cURL2 As String

    oObj = createUnoService("com.sun.star.registry.NestedRegistry")

    oReg1 = createUnoService("com.sun.star.registry.SimpleRegistry")
    oReg2 = createUnoService("com.sun.star.registry.SimpleRegistry")
    cURL1 = utils.getTempFileURL("BAS_forNestedRegistry1.rdb")
    cURL2 = utils.getTempFileURL("BAS_forNestedRegistry2.rdb")

    if FileExists(cURL1) then
        kill(cURL1)
    end if

    if FileExists(cURL2) then
        kill(cURL2)
    end if

    oReg1.open(cURL1, true, true)
    oReg2.open(cURL2, false, true)

    Dim aArgs(1) As Object
    aArgs(0) = oReg1
    aArgs(1) = oReg2

    aInitArgs = aArgs()
    
    oObj.initialize(aInitArgs())

Exit Sub
ErrHndl:
    Test.Exception()
End Sub

Sub DisposeObj()
    oReg1.close()
    oReg2.close()
End Sub
</script:module>
