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