Rony G. Flatscher wrote:
Hi Stephan,

just got to see your answer, hence my rather late answer:

maybe a very stupid question, still wondering whether constants wrapped as "Any" were intended. Using reflection via Java the following constants employ Any (for unsigned long):


What kind of reflection do you mean---Java reflection or UNO reflection? Please give some example code snippet.


Java reflection, here's the snippet dumping CONSTANTS:

--------------- cut here -------------
   static void dumpConstants(XTypeDescription xtd)
   {
       TypeClass tc=xtd.getTypeClass();

       XConstantsTypeDescription xitd = (XConstantsTypeDescription)
           UnoRuntime.queryInterface(XConstantsTypeDescription.class, xtd);

       XConstantTypeDescription ximtd [] = xitd.getConstants();
       int i2=0;
       String type="", name="";
       for (i2=0; i2<ximtd.length; i2++)
       {
           name = getUnqualifiedName(ximtd[i2].getName());
           Object rgfConstType = ximtd[i2].getConstantValue();
           say("\t\t\t"+i2+": "+name+" - "+ximtd[i2].getConstantValue()
               + " - " + pp(rgfConstType.getClass())
           );
       }
       say("");
   }
--------------- cut here -------------

You are caught in the ANY trap again  :)

com.sun.star.reflection.XConstantTypeDescription.getConstantValue() returns a UNO ANY. com.sun.star.uno.Any is the only representation in Java for a value of a UNO ANY that contains a value of UNO UNSIGNED SHORT. For UNO ANY values that contain values of other UNO types, there are shortcuts (e.g., a UNO ANY value that contains a value of UNO SHORT can be represented in Java as a value of java.lang.Short), and that shortcut is routinely taken. That is why in many cases the value returned by XConstantTypeDescription.getConstantValue in Java is not of type com.sun.star.uno.Any.

and here's the output for <com.sun.star.sync.SyncOptions>:

--------------- cut here ---------------
0: NONE - Any[Type[unsigned long], 0] - <class com.sun.star.uno.Any> 1: DONT_COPY - Any[Type[unsigned long], 1] - <class com.sun.star.uno.Any> 2: DONT_REMOVE - Any[Type[unsigned long], 2] - <class com.sun.star.uno.Any> 3: SERVER_WINS - Any[Type[unsigned long], 256] - <class com.sun.star.uno.Any> 4: CLIENT_WINS - Any[Type[unsigned long], 512] - <class com.sun.star.uno.Any> 5: CREATE_BACKUP - Any[Type[unsigned long], 65536] - <class com.sun.star.uno.Any>
--------------- cut here ---------------


Dumping the entire module "com.sun.star" the following constants are the only ones which show up as Any, if I am not mistaken:

    * <com.sun.star.sync.SyncOptions>
    * <com.sun.star.sync.SyncAction>
    * <com.sun.star.sync.SyncType>
    * <com.sun.star.sync.SyncMode>
    * <com.sun.star.sync.SyncEvent>
    * <com.sun.star.corba.iop.ServiceIdGroup>
    * <com.sun.star.corba.iop.ProfileIdGroup>


These constant groups have members of UNO type UNSIGNED LONG. They are represented in Java as final fields of Java type int (and you have to know that the values have to be interpreted as unsigned when you use them), no Any involved.


Hmm, I see. However, there are no "int", but "java.lang.Integer" datatypes.

See above. A java.lang.Integer value is used here to represent a UNO ANY value that contains a UNO LONG value.

There are two constants groups with java.lang.Long: <com.sun.star.embed.Aspects> and <com.sun.star.embed.EmbedMisc>.

------------------- cut here ------------------
    xtd=[<com.sun.star.embed.Aspects>:     <CONSTANTS>
            0: MSOLE_CONTENT - 1 - <class java.lang.Long>
            1: MSOLE_THUMBNAIL - 2 - <class java.lang.Long>
            2: MSOLE_ICON - 4 - <class java.lang.Long>
            3: MSOLE_DOCPRINT - 8 - <class java.lang.Long>

    xtd=[<com.sun.star.embed.EmbedMisc>:     <CONSTANTS>
            0: MS_EMBED_RECOMPOSEONRESIZE - 1 - <class java.lang.Long>
            1: MS_EMBED_ONLYICONIC - 2 - <class java.lang.Long>
            2: MS_EMBED_INSERTNOTREPLACE - 4 - <class java.lang.Long>
            3: MS_EMBED_STATIC - 8 - <class java.lang.Long>
            4: MS_EMBED_CANTLINKINSIDE - 16 - <class java.lang.Long>
            5: MS_EMBED_CANLINKBYOLE1 - 32 - <class java.lang.Long>
            6: MS_EMBED_ISLINKOBJECT - 64 - <class java.lang.Long>
            7: MS_EMBED_INSIDEOUT - 128 - <class java.lang.Long>
            8: MS_EMBED_ACTIVATEWHENVISIBLE - 256 - <class java.lang.Long>
9: MS_EMBED_RENDERINGISDEVICEINDEPENDENT - 512 - <class java.lang.Long>
            10: MS_EMBED_INVISIBLEATRUNTIME - 1024 - <class java.lang.Long>
            11: MS_EMBED_ALWAYSRUN - 2048 - <class java.lang.Long>
            12: MS_EMBED_ACTSLIKEBUTTON - 4096 - <class java.lang.Long>
            13: MS_EMBED_ACTSLIKELABEL - 8192 - <class java.lang.Long>
            14: MS_EMBED_NOUIACTIVATE - 16384 - <class java.lang.Long>
            15: MS_EMBED_ALIGNABLE - 32768 - <class java.lang.Long>
            16: MS_EMBED_SIMPLEFRAME - 65536 - <class java.lang.Long>
17: MS_EMBED_SETCLIENTSITEFIRST - 131072 - <class java.lang.Long>
            18: MS_EMBED_IMEMODE - 262144 - <class java.lang.Long>
19: MS_EMBED_IGNOREACTIVATEWHENVISIBLE - 524288 - <class java.lang.Long> 20: MS_EMBED_WANTSTOMENUMERGE - 1048576 - <class java.lang.Long> 21: MS_EMBED_SUPPORTSMULTILEVELUNDO - 2097152 - <class java.lang.Long> 22: EMBED_ACTIVATEIMMEDIATELY - 4294967296 - <class java.lang.Long>
            23: EMBED_NEVERRESIZE - 8589934592 - <class java.lang.Long>
------------------- cut here ------------------

Regards,

---rony

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to