Thanks ariel.
I have finished major part of this code. I only had doubt in that
queryInterface part.


On Thu, Jun 20, 2013 at 1:08 AM, Ariel Constenla-Haile
<arie...@apache.org>wrote:

> Hi Rajath,
>
> On Wed, Jun 19, 2013 at 09:55:21PM +0530, Rajath Shashidhara wrote:
> > Hello,
> >
> > I'm working on the XActiveDataSink.
> > I'm slightly confused about how to handle OpenCommandArgument2.Sink .
> > The object is the one which is filled with the XActiveDataSink object for
> > which I have to set the InputStream by calling setInputStream() and pass
> > the XInputStream implementation.
> > This is what I have understood. But, the confusing thing is why  is the
> > datatype for Sink - Object? Shoudnt it be XActiveDataSink? I'm not
> > understanding how to handle this Sink.
>
> The OpenCommandArgument2.Sink can be of different kinds, that's why its
> type is defined in a generic way as css.uno.XInterface; this interface
> is the base interface of all other interfaces:
>
> http://www.openoffice.org/api/docs/common/ref/com/sun/star/ucb/OpenCommandArgument.html#Sink
>
> css.uno.XInterface, in this case, is mapped in the Jave bridge to
> java.lang.Object:
>
> http://wiki.openoffice.org/wiki/Documentation/DevGuide/ProUNO/Java/Mapping_of_Interface_Types
>
> You have to find out if the sink is
>
> a) com.sun.star.io.XOutputStream
> b) com.sun.star.io.XActiveDataSink
> c) com.sun.star.io.XActiveDataStreamer
>
> simply query the sink for each interface. Something like this:
>
>
> private Object open(
>         com.sun.star.ucb.OpenCommandArgument2 aOpenCommand,
>         com.sun.star.ucb.XCommandEnvironment xEnvironment)
>         throws com.sun.star.uno.Exception {
>     Object oRet = com.sun.star.uno.Any.VOID;
>
>     int nOpenMode = aOpenCommand.Mode;
>     if (nOpenMode == com.sun.star.ucb.OpenMode.ALL
>             || nOpenMode == com.sun.star.ucb.OpenMode.DOCUMENTS
>             || nOpenMode == com.sun.star.ucb.OpenMode.FOLDERS) {
>         if (!isFolder(xEnvironment)) {
>             throw new com.sun.star.lang.IllegalArgumentException(
>                     "The content is not a folder!");
>         }
>         com.sun.star.ucb.XDynamicResultSet xResultSet = new
> DynamicResultSet(
>                 m_xContext, this, aOpenCommand, xEnvironment);
>         oRet = xResultSet;
>     } else if (nOpenMode == com.sun.star.ucb.OpenMode.DOCUMENT) {
>         Object aSink = aOpenCommand.Sink;
>         if (aSink == null) {
>             throw new com.sun.star.lang.IllegalArgumentException(
>                     "open command without sink!");
>         }
>         // the Sink can be
>         // a) com.sun.star.io.XOutputStream
>         // b) com.sun.star.io.XActiveDataSink
>         // c) com.sun.star.io.XActiveDataStreamer
>         com.sun.star.io.XActiveDataStreamer xActiveDataStreamer =
> UnoRuntime.queryInterface(
>                 com.sun.star.io.XActiveDataStreamer.class, aSink);
>         if (xActiveDataStreamer != null) {
>             com.sun.star.io.XStream xStream =
> getContentStream(xEnvironment);
>             xActiveDataStreamer.setStream(xStream);
>         } else {
>             com.sun.star.io.XOutputStream xOutputStream =
> UnoRuntime.queryInterface(
>                     com.sun.star.io.XOutputStream.class, aSink);
>             if (xOutputStream != null) {
>                 com.sun.star.io.XInputStream xInputStream =
> getContentInputStream(xEnvironment);
>                 copyStream(xInputStream, xOutputStream);
>             } else {
>                 com.sun.star.io.XActiveDataSink xActiveDataSink =
> UnoRuntime.queryInterface(
>                         com.sun.star.io.XActiveDataSink.class, aSink);
>                 if (xActiveDataSink == null) {
>                     throw new com.sun.star.lang.IllegalArgumentException(
>                             "open command's sink is neither
> XActiveDataStreamer, XOutputStream nor XActiveDataSink!");
>                 }
>                 com.sun.star.io.XInputStream xInputStream =
> getContentInputStream(xEnvironment);
>                 xActiveDataSink.setInputStream(xInputStream);
>             }
>         }
>     } else if (nOpenMode ==
> com.sun.star.ucb.OpenMode.DOCUMENT_SHARE_DENY_NONE ||
>             nOpenMode ==
> com.sun.star.ucb.OpenMode.DOCUMENT_SHARE_DENY_WRITE){
>         throw new UnsupportedCommandException();
>     }
>     return oRet;
> }
>
>
>
> Regards
> --
> Ariel Constenla-Haile
> La Plata, Argentina
>



-- 
Rajath S,
M.Sc(Hons.) Physics,
Birla Institute of Technology and Science - Pilani,
Pilani

Reply via email to