<?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="beans_XFastPropertySet" 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.
'
'*************************************************************************







Sub RunTest()

'*************************************************************************
' INTERFACE: 
' com.sun.star.beans.XFastPropertySet
'*************************************************************************
On Error Goto ErrHndl

    Dim bOK As Boolean
    Dim oPropertySetInfo As Object
    Dim oProperties As Variant
    Dim nIndex As Long, nHanlde As Long
    Dim nCount As Integer
    Dim vMemVal As Variant, vNewVal As Variant
    Dim bBoolean As Boolean
    Dim nInteger As Integer
    Dim nLong As Long
    Dim nSingle As Single
    Dim nDouble As Double

    oPropertySetInfo = oObj.GetPropertySetInfo()
    oProperties = oPropertySetInfo.Properties
    nCount = uBound(oProperties)

    nIndex = 0
    nMem = nIndex
    'find at first a Boolean Value, if not available a String Property
    While (NOT bFound) AND (nCount &gt;= nIndex)
        If VarType(oObj.getFastPropertyValue(oProperties(nIndex).Handle)) = 11 Then ' it is a Boolean Proerty
            bFound = true
            nMem = nIndex
        else
            If VarType(oObj.getFastPropertyValue(oProperties(nIndex).Handle)) = 8 Then ' it is a String Property
                nMem = nIndex
            end if
        end if
        nIndex = nIndex + 1
    Wend
    nIndex = nMem
    Out.Log("Property selected: '" + oProperties(nIndex).Name + "'")

    'memory the old Value
    vMemVal = oObj.getFastPropertyValue(oProperties(nIndex).Handle)
    ' change the Value
    select case VarType(oObj.getFastPropertyValue(oProperties(nIndex).Handle)
        case 11 'boolean
            bBoolean = NOT oObj.getFastPropertyValue(oProperties(nIndex).Handle)
            vNewVal = bBoolean
        case 2 'integer
            nInteger = oObj.getFastPropertyValue(oProperties(nIndex).Handle) + 1
            vNewVal = nInteger
        case 3 'long
            nLong = oObj.getFastPropertyValue(oProperties(nIndex).Handle) + 1
            vNewVal = nLong
        case 4 'single
            nSingle = oObj.getFastPropertyValue(oProperties(nIndex).Handle) + 1
            vNewVal = nSingle
        case 5 'double
            nDouble = oObj.getFastPropertyValue(oProperties(nIndex).Handle) + 1
            vNewVal = nDouble
        case 8 'string
          vNewVal = oObj.getPropertyValue(oProperties(nIndex).Name) + cIfcShortName
    end select

    nHandle = oProperties(nIndex).Handle

    Test.StartMethod("getFastPropertyValue()")
    bOK = true
    bOK = bOK AND (vMemVal = oObj.getFastPropertyValue(nHandle))
    Test.MethodTested("getFastPropertyValue()", bOK)

    Test.StartMethod("setFastPropertyValue()")
    bOK = true
    oObj.setFastPropertyValue(nHandle, vNewVal)
    bOK = bOK AND (vMemVal &lt;&gt; oObj.getFastPropertyValue(nHandle))
    Test.MethodTested("setFastPropertyValue()", bOK)


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