<?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="registry_XImplementationRegistration" 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



Sub RunTest()

'*************************************************************************
' INTERFACE: 
' com.sun.star.registry.XImplementationRegistration
'*************************************************************************
On Error Goto ErrHndl
    Dim bOK As Boolean
    Dim aImplementationLoader As String
    Dim aImplementations As Variant
    Dim aMissingServices As Variant
    Dim aLocation As String
    Dim i As Integer
    Dim k As Integer
    Dim xReg As Object
    Dim regKey As Object
    Dim keyNames As Variant
    Dim bNeedTest As Boolean

    xReg = createUNOService("com.sun.star.registry.SimpleRegistry")
    xReg.Open(utils.Path2URL(cTestDocsDir &amp; "XImpReg.reg"), false, true)
    aImplementationLoader = "com.sun.star.loader.Java2"
    aLocation = utils.Path2URL(cTestDocsDir &amp; "qadevlibs/MyPersistObjectImpl.jar")

    Test.StartMethod("getImplementations()")
    bOK = true
    aImplementations = oObj.getImplementations(aImplementationLoader, aLocation)
    bOK = bOK AND i &gt;= 0
    for i = 0 to ubound(aImplementations)
        Out.Log "" &amp; i + 1 &amp; ") " &amp; aImplementations(i)
    next i
    Test.MethodTested("getImplementations()", bOK)

    Test.StartMethod("registerImplementation()")
    Out.Log("Registering implementation from " &amp; aLocation)
    bOK = true
    oObj.registerImplementation(aImplementationLoader, aLocation, xReg)

    bOK = bOK AND xReg.isValid()

    regKey = xReg.getRootKey.openKey("IMPLEMENTATIONS")
    keyNames = regKey.getKeyNames()
    Out.Log("In registry found " &amp; ubound(keyNames) + 1 &amp; " implementations.")
    Dim aFlags(ubound(aImplementations())) As Boolean
    for i = 0 to ubound(aFlags())
        aFlags(i) = false
    next i

    for i = 0 to ubound(keyNames())
        Out.Log("Found key: " &amp; keyNames(i))
        for k = 0 to ubound(aImplementations)
            if (inStr(1, keyNames(i), aImplementations(k)) &gt; 0 ) then
                aFlags(k) = true
            end if
        next k
    next i

    for i = 0 to ubound(aFlags())
        if (NOT aFlags(i)) then
            Out.Log("Can't find information about " &amp; aImplementations(i) &amp; " in regestry")
            bOK = false
        end if
    next i

    Test.MethodTested("registerImplementation()", bOK)

    Test.StartMethod("checkInstantiation()")
    bOK = true
    Out.Log("Looking for missing services to create " &amp; aImplementations(0))
    aMissingServices = oObj.checkInstantiation(aImplementations(0))
    Out.Log("" &amp; ubound(aMissingServices) + 1 &amp; " missing services were found")
    for i = 0 to ubound(aMissingServices)
        Out.Log "" &amp; i &amp; ") " &amp; aMissingServices(i)
    next i
    Test.MethodTested("checkInstantiation()", bOK)

    Test.StartMethod("revokeImplementation()")
    bOK = true
    bNeedTest = false

    oObj.revokeImplementation(aLocation, xReg)

    bOK = bOK AND xReg.isValid()
    regKey = xReg.getRootKey
    keyNames = regKey.getKeyNames()
    for i = 0 to ubound(keyNames())
        if (inStr(1, keyNames(i), "IMPLEMENTATIONS") &gt; 0) then
            bNeedTest = true
        end if
    next i
    if (NOT bNeedTest) then
        Out.Log("No implementation was found.")
    end if

    if (bOK AND bNeedTest) then
        regKey = xReg.getRootKey.openKey("IMPLEMENTATIONS")
        Out.Log("In registry found " &amp; ubound(keyNames) + 1 &amp; " implementations.")

        for i = 0 to ubound(aFlags())
            aFlags(i) = false
        next i

        for i = 0 to ubound(keyNames())
            Out.Log("Found key: " &amp; keyNames(i))
            for k = 0 to ubound(aImplementations)
                if (inStr(1, keyNames(i), aImplementations(k)) &gt; 0 ) then
                    aFlags(k) = true
                end if
            next k
        next i

        for i = 0 to ubound(aFlags())
            if (aFlags(i)) then
                Out.Log("Information about " &amp; aImplementations(i) &amp; " is still in regestry")
                bOK = false
            end if
        next i
    end if
    Test.MethodTested("revokeImplementation()", bOK)

    xReg.Close()
Exit Sub
ErrHndl:
    Test.Exception()
    bOK = false
    resume next
End Sub
</script:module>
