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
pgpVgKz2RQg3c.pgp
Description: PGP signature