API/Samples/Java/Office/PropertySet

    From The Document Foundation Wiki
    < API‎ | Samples‎ | Java

    About the 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 could also get it 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 LibreOffice Basic code of the macro:

    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.


    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(English) or (Chinese version).

    Create component project


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

    Use LibreOffice 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:

      java.lang.Object
       └ 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;
    import com.sun.star.uno.XInterface;

    Add following members to the class as component properties, it's a list of usable data type

    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.

    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.

    Delopyment

    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.

    msgbox propTest.dbg_supportedinterfaces
    msgbox propTest.dbg_properties


    Example project download

    File:PropertySet.zip

    See Also

    Apache Feather Logo.svg

    This work is licensed under the Apache License version 2.0