From Apache OpenOffice Wiki
< API‎ | Samples‎ | Java
Revision as of 01:48, 11 January 2008 by Jirong (Talk | contribs)

Jump to: navigation, search

PropertySet Example

This example shows how to write a component and set it's properties. Once it is deployed, we'll be able to use a document with OO.o Basic macro to test the component and get its property informations.

First of all, let's look at the example test document “/API/Samples/Java/PropertySet/test/”. You can download from here File:PropertySetTest.odt. The example button triggers a macro which creates the “PropTest” example service and displays the supported interfaces and properties. You can take a closer look to the Basic macro by editing the macro:
Select Tools -> Macros -> Organize Macros -> StarOffice Basic, navigate into the document section of “PropertySetTest.odt”, select the Standard -> “PropTest” module, select the “PropetySetTest” macro and press the edit button.

Here is the OpenOffice.org Basic code of the macro: [vb,N]

 REM  *****  BASIC  *****
 Sub PropertySetTest

dim propTest as object propTest = createUnoService("org.openoffice.sdk.example.propertyset.PropTestService") msgbox propTest.dbg_supportedinterfaces msgbox propTest.dbg_properties

 End Sub

CreateUnoService() method initializes the component / creates the service using service name “org.openoffice.sdk.example.propertyset.PropTestService”, the name which should be exactly the same as the service name property when component is written.

[java, N]

   private static final String[] m_serviceNames = {
       "org.openoffice.sdk.example.propertyset.PropTestService" };

If you would like to know more detail about above code, please read OO.o Basic chapters in developers' guide or visit: http://docs.sun.com/app/docs/doc/819-0439/faakn?l=en&q=staroffice+basic&a=view (English)
http://docs.sun.com/app/docs/doc/819-1334/faakn?l=zh&a=view (Chinese)

Create component project

The process to create the PropertySet project could refers to MinimalComponent project. Some important settings are addressed here. If you don't familiar with creating a component using OO.o API plugin, you may take a look at MinimalComponent example as starting point.

Use OpenOffice.org Component wizards

Set the project details
Project Name: PropertySet
Class Name: PropTest
Package: org.openoffice.sdk.example.propertyset

Define New Data Type

Service Property Name: PropertyTestService (it's default value)
Interface: com.sun.star.lang.XServiceInfo

Edit the Source file: PropTest.java

Change the Class definitions to:
public final class PropTest extends PropertySet implements com.sun.star.lang.XServiceInfo

the inherited relation between PropertySet and WeakBase is:

   └ com.sun.star.lib.uno.helper.WeakBase
     └ com.sun.star.lib.uno.helper.ComponentBase
         └ com.sun.star.lib.uno.helper.PropertySet

Import necessary libraries:

import com.sun.star.lib.uno.helper.PropertySet;
import com.sun.star.beans.PropertyAttribute;
import com.sun.star.lang.XTypeProvider;
import com.sun.star.uno.Any;
import com.sun.star.uno.Type;

Add following members to the class as component properties [java,N] public boolean boolA; public char charA; public byte byteA; public short shortA; public int intA; public long longA; public float floatA; public double doubleA; public String stringA; // MAYBEVOID public Object objectA; // MAYBEVOID public Any anyA; // MAYBEVOID public Type typeA;// MAYBEVOID public XInterface xinterfaceA;// MAYBEVOID public XTypeProvider xtypeproviderA;// MAYBEVOID public boolean[] arBoolA; // MAYBEVOID public char[] arCharA; // MAYBEVOID public byte[] arByteA; // MAYBEVOID public short[] arShortA; // MAYBEVOID public int[] arIntA; // MAYBEVOID public long[] arLongA; // MAYBEVOID public float[] arFloatA; // MAYBEVOID public double[] arDoubleA; // MAYBEVOID public String[] arStringA; // MAYBEVOID public Object[] arObjectA; // MAYBEVOID public Any[] arAnyA; // MAYBEVOID public XInterface[] arXinterfaceA; // MAYBEVOID public boolean[][] ar2BoolA; // MAYBEVOID public Boolean boolClassA; // MAYBEVOID public Character charClassA; // MAYBEVOID public Byte byteClassA; // MAYBEVOID public Short shortClassA; // MAYBEVOID public Integer intClassA; // MAYBEVOID public Long longClassA; // MAYBEVOID public Float floatClassA; // MAYBEVOID public Double doubleClassA; // MAYBEVOID

// readonly public int roIntA= 100; public Integer roIntClassA= new Integer(100); public Object roObjectA= new Integer(101); public Any roAnyA= new Any( new Type(int.class), new Integer(102));

// BOUND & CONSTRAINED public boolean bcBoolA; public Boolean bcBoolClassA; // MAYBEVOID public Object bcObjectA; // MAYBEVOID public Any bcAnyA; // MAYBEVOID

// MAYBEVOID public Integer mvIntA; public Object mvObjectA; public Any mvAnyA; public XInterface mvXinterfaceA;

In the constructor “PropTest( XComponentContext context )”, initialize those properties using registerProperty() method, the method registers a property with this class. It is presumed that the name of property is equal to the name of the member variable that holds the property value.

[java,N] registerProperty("boolA", (short) 0); registerProperty("charA", (short) 0); registerProperty("byteA", (short) 0); registerProperty("shortA", (short) 0); registerProperty("intA", (short) 0); registerProperty("longA", (short) 0); registerProperty("floatA", (short) 0); registerProperty("doubleA", (short) 0); registerProperty("stringA", PropertyAttribute.MAYBEVOID); registerProperty("objectA", PropertyAttribute.MAYBEVOID); registerProperty("anyA", PropertyAttribute.MAYBEVOID); registerProperty("typeA", PropertyAttribute.MAYBEVOID); registerProperty("xinterfaceA", PropertyAttribute.MAYBEVOID); registerProperty("xtypeproviderA", PropertyAttribute.MAYBEVOID); registerProperty("arBoolA", PropertyAttribute.MAYBEVOID); registerProperty("arCharA", PropertyAttribute.MAYBEVOID); registerProperty("arByteA", PropertyAttribute.MAYBEVOID); registerProperty("arShortA", PropertyAttribute.MAYBEVOID); registerProperty("arIntA", PropertyAttribute.MAYBEVOID); registerProperty("arLongA", PropertyAttribute.MAYBEVOID); registerProperty("arFloatA", PropertyAttribute.MAYBEVOID); registerProperty("arDoubleA", PropertyAttribute.MAYBEVOID); registerProperty("arStringA", PropertyAttribute.MAYBEVOID); registerProperty("arObjectA", PropertyAttribute.MAYBEVOID); registerProperty("arAnyA", PropertyAttribute.MAYBEVOID); registerProperty("arXinterfaceA", PropertyAttribute.MAYBEVOID); registerProperty("ar2BoolA", PropertyAttribute.MAYBEVOID); registerProperty("boolClassA", PropertyAttribute.MAYBEVOID); registerProperty("charClassA", PropertyAttribute.MAYBEVOID); registerProperty("byteClassA", PropertyAttribute.MAYBEVOID); registerProperty("shortClassA", PropertyAttribute.MAYBEVOID); registerProperty("intClassA", PropertyAttribute.MAYBEVOID); registerProperty("longClassA", PropertyAttribute.MAYBEVOID); registerProperty("floatClassA", PropertyAttribute.MAYBEVOID); registerProperty("doubleClassA", PropertyAttribute.MAYBEVOID); registerProperty("roIntA", PropertyAttribute.READONLY); registerProperty("roIntClassA", PropertyAttribute.READONLY); registerProperty("roObjectA", PropertyAttribute.READONLY); registerProperty("roAnyA", PropertyAttribute.READONLY); registerProperty("bcBoolA",(short) ( PropertyAttribute.BOUND | PropertyAttribute.CONSTRAINED)); registerProperty("bcBoolClassA", (short) (PropertyAttribute.BOUND |PropertyAttribute.CONSTRAINED | PropertyAttribute.MAYBEVOID)); registerProperty("bcObjectA", (short) (PropertyAttribute.BOUND | PropertyAttribute.CONSTRAINED | PropertyAttribute.MAYBEVOID)); registerProperty("bcAnyA", (short) (PropertyAttribute.BOUND | PropertyAttribute.CONSTRAINED |PropertyAttribute.MAYBEVOID)); registerProperty("mvIntA", PropertyAttribute.MAYBEVOID); registerProperty("mvObjectA", PropertyAttribute.MAYBEVOID); registerProperty("mvAnyA", PropertyAttribute.MAYBEVOID); registerProperty("mvXinterfaceA", PropertyAttribute.MAYBEVOID);

For information of PropertyAttribute, please visit SDK docuement: SDK_DIR/docs/java/ref/com/sun/star/beans/PropertyAttribute.html The document can be loaded into browser when the editing cursor on “PropertyAttribute” string in the editor and then press keys Alt + F1.


Deploy the component and load PropTest.odt to test your component. After the button pressed, two message boxes will show this component's supported interfaces and it's attributes. [vb,N] msgbox propTest.dbg_supportedinterfaces msgbox propTest.dbg_properties

Personal tools