From Apache OpenOffice Wiki
< API‎ | Samples‎ | Java
Revision as of 01:26, 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 “/PropertySet/test/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, you can 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));
   public boolean bcBoolA;
   public Boolean bcBoolClassA; // MAYBEVOID
   public Object bcObjectA; // MAYBEVOID
   public Any bcAnyA;       // 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.


  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. [basic,N]

       msgbox propTest.dbg_supportedinterfaces

msgbox propTest.dbg_properties

Personal tools