1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski package helper; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 27*b1cdbd2cSJim Jagielski 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory; 30*b1cdbd2cSJim Jagielski import com.sun.star.ucb.XSimpleFileAccess; 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski /** 33*b1cdbd2cSJim Jagielski * It simulates an input and output stream and 34*b1cdbd2cSJim Jagielski * implements the interfaces XInputStream, XOutputStream. 35*b1cdbd2cSJim Jagielski * So it can be used for testing loading/saving of documents 36*b1cdbd2cSJim Jagielski * using streams instead of URLs. 37*b1cdbd2cSJim Jagielski * 38*b1cdbd2cSJim Jagielski */ 39*b1cdbd2cSJim Jagielski public class StreamSimulator implements com.sun.star.io.XInputStream , 40*b1cdbd2cSJim Jagielski com.sun.star.io.XOutputStream , 41*b1cdbd2cSJim Jagielski com.sun.star.io.XSeekable 42*b1cdbd2cSJim Jagielski { 43*b1cdbd2cSJim Jagielski //_________________________________ 44*b1cdbd2cSJim Jagielski /** 45*b1cdbd2cSJim Jagielski * @member m_sFileName name of the corrsponding file on disk 46*b1cdbd2cSJim Jagielski * @member m_xInStream the internal input stream for reading 47*b1cdbd2cSJim Jagielski * @member m_xOutStream the internal input stream for writing 48*b1cdbd2cSJim Jagielski * @member m_xSeek points at runtime to m_xInStream or m_xOutStream and make it seekable 49*b1cdbd2cSJim Jagielski * 50*b1cdbd2cSJim Jagielski * @member //m_aProtocol the external set protocol object for logging messages 51*b1cdbd2cSJim Jagielski * @member m_bInWasUsed indicates, that the input stream interface was used 52*b1cdbd2cSJim Jagielski * @member m_bOutWasUsed indicates, that the output stream interface was used 53*b1cdbd2cSJim Jagielski */ 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielski private String m_sFileName ; 56*b1cdbd2cSJim Jagielski private com.sun.star.io.XInputStream m_xInStream ; 57*b1cdbd2cSJim Jagielski private com.sun.star.io.XOutputStream m_xOutStream ; 58*b1cdbd2cSJim Jagielski private com.sun.star.io.XSeekable m_xSeek ; 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski //public ComplexTestEnvironment //m_aProtocol ; 61*b1cdbd2cSJim Jagielski public boolean m_bInWasUsed ; 62*b1cdbd2cSJim Jagielski public boolean m_bOutWasUsed ; 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski //_________________________________ 65*b1cdbd2cSJim Jagielski /** 66*b1cdbd2cSJim Jagielski * construct a new instance of this class 67*b1cdbd2cSJim Jagielski * It set the name of the correspojnding file on disk, which 68*b1cdbd2cSJim Jagielski * should be source or target for the following operations on 69*b1cdbd2cSJim Jagielski * this object. And it regulate if it should function as 70*b1cdbd2cSJim Jagielski * input or output stream. 71*b1cdbd2cSJim Jagielski * 72*b1cdbd2cSJim Jagielski * @param sFileName 73*b1cdbd2cSJim Jagielski * name of the file on disk 74*b1cdbd2cSJim Jagielski * Will be used as source (if param bInput==true) 75*b1cdbd2cSJim Jagielski * or as target (if param bInput==false). 76*b1cdbd2cSJim Jagielski * 77*b1cdbd2cSJim Jagielski * @param bInput 78*b1cdbd2cSJim Jagielski * it specify, which interface should work at this object. 79*b1cdbd2cSJim Jagielski * <TRUE/> => we simulate an input stream 80*b1cdbd2cSJim Jagielski * <FALSE/> => we simulate an output stream 81*b1cdbd2cSJim Jagielski * 82*b1cdbd2cSJim Jagielski * @throw com.sun.star.io.NotConnectedException 83*b1cdbd2cSJim Jagielski * in case the internal streams to the file on disk couldn't established. 84*b1cdbd2cSJim Jagielski * They are neccessary. Otherwhise this simulator can't realy work. 85*b1cdbd2cSJim Jagielski */ StreamSimulator( String sFileName , boolean bInput , lib.TestParameters param )86*b1cdbd2cSJim Jagielski public StreamSimulator( String sFileName , boolean bInput , 87*b1cdbd2cSJim Jagielski lib.TestParameters param ) throws com.sun.star.io.NotConnectedException 88*b1cdbd2cSJim Jagielski { 89*b1cdbd2cSJim Jagielski ////m_aProtocol = new ComplexTestEnvironment(); 90*b1cdbd2cSJim Jagielski m_sFileName = sFileName ; 91*b1cdbd2cSJim Jagielski m_bInWasUsed = false ; 92*b1cdbd2cSJim Jagielski m_bOutWasUsed = false ; 93*b1cdbd2cSJim Jagielski 94*b1cdbd2cSJim Jagielski try 95*b1cdbd2cSJim Jagielski { 96*b1cdbd2cSJim Jagielski XSimpleFileAccess xHelper = (XSimpleFileAccess) 97*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XSimpleFileAccess.class, 98*b1cdbd2cSJim Jagielski ((XMultiServiceFactory)param.getMSF()).createInstance("com.sun.star.ucb.SimpleFileAccess")); 99*b1cdbd2cSJim Jagielski /* com.sun.star.ucb.XSimpleFileAccess xHelper = (com.sun.star.ucb.XSimpleFileAccess)OfficeConnect.createRemoteInstance( 100*b1cdbd2cSJim Jagielski com.sun.star.ucb.XSimpleFileAccess.class, 101*b1cdbd2cSJim Jagielski "com.sun.star.ucb.SimpleFileAccess");*/ 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski if (xHelper == null) 104*b1cdbd2cSJim Jagielski throw new com.sun.star.io.NotConnectedException("ucb helper not available. Can't create streams."); 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski if (bInput) 107*b1cdbd2cSJim Jagielski { 108*b1cdbd2cSJim Jagielski m_xInStream = xHelper.openFileRead(m_sFileName); 109*b1cdbd2cSJim Jagielski m_xSeek = (com.sun.star.io.XSeekable)UnoRuntime.queryInterface( 110*b1cdbd2cSJim Jagielski com.sun.star.io.XSeekable.class, 111*b1cdbd2cSJim Jagielski m_xInStream); 112*b1cdbd2cSJim Jagielski } 113*b1cdbd2cSJim Jagielski else 114*b1cdbd2cSJim Jagielski { 115*b1cdbd2cSJim Jagielski m_xOutStream = xHelper.openFileWrite(m_sFileName); 116*b1cdbd2cSJim Jagielski m_xSeek = (com.sun.star.io.XSeekable)UnoRuntime.queryInterface( 117*b1cdbd2cSJim Jagielski com.sun.star.io.XSeekable.class, 118*b1cdbd2cSJim Jagielski m_xOutStream); 119*b1cdbd2cSJim Jagielski } 120*b1cdbd2cSJim Jagielski } 121*b1cdbd2cSJim Jagielski catch(com.sun.star.uno.Exception exUno) 122*b1cdbd2cSJim Jagielski { 123*b1cdbd2cSJim Jagielski ////m_aProtocol.log("\tstream not open. throw NotConnectedException\n\n\tfailed\n}\n"); 124*b1cdbd2cSJim Jagielski throw new com.sun.star.io.NotConnectedException("Could not open the file."); 125*b1cdbd2cSJim Jagielski } 126*b1cdbd2cSJim Jagielski } 127*b1cdbd2cSJim Jagielski 128*b1cdbd2cSJim Jagielski /* public void finalize() 129*b1cdbd2cSJim Jagielski { 130*b1cdbd2cSJim Jagielski ////m_aProtocol.log("finalize was called. Please check if it was right or not.\n"); 131*b1cdbd2cSJim Jagielski } */ 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski //_________________________________ 134*b1cdbd2cSJim Jagielski /** 135*b1cdbd2cSJim Jagielski * following methods simulates the XInputStream. 136*b1cdbd2cSJim Jagielski * The notice all actions inside the internal protocol 137*b1cdbd2cSJim Jagielski * and try to map all neccessary functions to the internal 138*b1cdbd2cSJim Jagielski * open in-stream. 139*b1cdbd2cSJim Jagielski */ readBytes( byte[][] lData , int nBytesToRead )140*b1cdbd2cSJim Jagielski public int readBytes( /*OUT*/ byte[][] lData , 141*b1cdbd2cSJim Jagielski /*IN*/ int nBytesToRead ) throws com.sun.star.io.NotConnectedException , 142*b1cdbd2cSJim Jagielski com.sun.star.io.BufferSizeExceededException, 143*b1cdbd2cSJim Jagielski com.sun.star.io.IOException 144*b1cdbd2cSJim Jagielski { 145*b1cdbd2cSJim Jagielski //m_aProtocol.log("readBytes(lData["+lData.length+"]["+lData[0]+"],"+nBytesToRead+")\n{\n"); 146*b1cdbd2cSJim Jagielski m_bInWasUsed = true; 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski if (m_xInStream == null) 149*b1cdbd2cSJim Jagielski { 150*b1cdbd2cSJim Jagielski //m_aProtocol.log("\tstream not open. throw NotConnectedException\n\n\tfailed\n}\n"); 151*b1cdbd2cSJim Jagielski throw new com.sun.star.io.NotConnectedException("stream not open"); 152*b1cdbd2cSJim Jagielski } 153*b1cdbd2cSJim Jagielski 154*b1cdbd2cSJim Jagielski int nRead = 0; 155*b1cdbd2cSJim Jagielski try 156*b1cdbd2cSJim Jagielski { 157*b1cdbd2cSJim Jagielski nRead = m_xInStream.readBytes(lData,nBytesToRead); 158*b1cdbd2cSJim Jagielski } 159*b1cdbd2cSJim Jagielski catch (com.sun.star.io.NotConnectedException exConnect) { //m_aProtocol.log("\tgot NotConnectedException\n\tfailed\n}\n" ); throw exConnect; 160*b1cdbd2cSJim Jagielski } 161*b1cdbd2cSJim Jagielski catch (com.sun.star.io.BufferSizeExceededException exBuffer ) { //m_aProtocol.log("\tgot BufferSizeExceededException\n\tfailed\n}\n"); throw exBuffer; 162*b1cdbd2cSJim Jagielski } 163*b1cdbd2cSJim Jagielski catch (com.sun.star.io.IOException exIO ) { //m_aProtocol.log("\tgot IOException\n\tfailed\n}\n" ); throw exIO; 164*b1cdbd2cSJim Jagielski } 165*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.RuntimeException exRuntime) { //m_aProtocol.log("\tgot RuntimeException\n\tfailed\n}\n" ); throw exRuntime; 166*b1cdbd2cSJim Jagielski } 167*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.Exception exUno ) { //m_aProtocol.log("\tgot Exception\n\tfailed\n}\n" ); 168*b1cdbd2cSJim Jagielski } 169*b1cdbd2cSJim Jagielski 170*b1cdbd2cSJim Jagielski //m_aProtocol.log("\treads "+nRead+" bytes\n\tOK\n}\n"); 171*b1cdbd2cSJim Jagielski 172*b1cdbd2cSJim Jagielski //if (nRead != nBytesToRead) 173*b1cdbd2cSJim Jagielski //m_aProtocol.log("there are some missing bytes for reading!\n"); 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski return nRead; 176*b1cdbd2cSJim Jagielski } 177*b1cdbd2cSJim Jagielski 178*b1cdbd2cSJim Jagielski //_________________________________ 179*b1cdbd2cSJim Jagielski readSomeBytes( byte[][] lData , int nMaxBytesToRead )180*b1cdbd2cSJim Jagielski public int readSomeBytes( /*OUT*/ byte[][] lData , 181*b1cdbd2cSJim Jagielski /*IN*/ int nMaxBytesToRead ) throws com.sun.star.io.NotConnectedException , 182*b1cdbd2cSJim Jagielski com.sun.star.io.BufferSizeExceededException , 183*b1cdbd2cSJim Jagielski com.sun.star.io.IOException 184*b1cdbd2cSJim Jagielski { 185*b1cdbd2cSJim Jagielski //m_aProtocol.log("readSomeBytes(lData["+lData.length+"]["+lData[0]+"],"+nMaxBytesToRead+")\n{\n"); 186*b1cdbd2cSJim Jagielski m_bInWasUsed = true; 187*b1cdbd2cSJim Jagielski 188*b1cdbd2cSJim Jagielski if (m_xInStream == null) 189*b1cdbd2cSJim Jagielski { 190*b1cdbd2cSJim Jagielski //m_aProtocol.log("\tstream not open. throw NotConnectedException\n\tfailed\n}\n"); 191*b1cdbd2cSJim Jagielski throw new com.sun.star.io.NotConnectedException("stream not open"); 192*b1cdbd2cSJim Jagielski } 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski int nRead = 0; 195*b1cdbd2cSJim Jagielski try 196*b1cdbd2cSJim Jagielski { 197*b1cdbd2cSJim Jagielski nRead = m_xInStream.readSomeBytes(lData,nMaxBytesToRead); 198*b1cdbd2cSJim Jagielski } 199*b1cdbd2cSJim Jagielski catch (com.sun.star.io.NotConnectedException exConnect) { //m_aProtocol.log("\tgot NotConnectedException\n\tfailed\n}\n" ); throw exConnect; 200*b1cdbd2cSJim Jagielski } 201*b1cdbd2cSJim Jagielski catch (com.sun.star.io.BufferSizeExceededException exBuffer ) { //m_aProtocol.log("\tgot BufferSizeExceededException\n\tfailed\n}\n"); throw exBuffer; 202*b1cdbd2cSJim Jagielski } 203*b1cdbd2cSJim Jagielski catch (com.sun.star.io.IOException exIO ) { //m_aProtocol.log("\tgot IOException\n\tfailed\n}\n" ); throw exIO; 204*b1cdbd2cSJim Jagielski } 205*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.RuntimeException exRuntime) { //m_aProtocol.log("\tgot RuntimeException\n\tfailed\n}\n" ); throw exRuntime; 206*b1cdbd2cSJim Jagielski } 207*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.Exception exUno ) { //m_aProtocol.log("\tgot Exception\n\tfailed\n}\n" ); 208*b1cdbd2cSJim Jagielski } 209*b1cdbd2cSJim Jagielski 210*b1cdbd2cSJim Jagielski //m_aProtocol.log("\treads "+nRead+" bytes\n\tOK\n}\n"); 211*b1cdbd2cSJim Jagielski 212*b1cdbd2cSJim Jagielski //if (nRead != nMaxBytesToRead) 213*b1cdbd2cSJim Jagielski //m_aProtocol.log("there are some missing bytes for reading!"); 214*b1cdbd2cSJim Jagielski 215*b1cdbd2cSJim Jagielski return nRead; 216*b1cdbd2cSJim Jagielski } 217*b1cdbd2cSJim Jagielski 218*b1cdbd2cSJim Jagielski //_________________________________ 219*b1cdbd2cSJim Jagielski skipBytes( int nBytesToSkip )220*b1cdbd2cSJim Jagielski public void skipBytes( /*IN*/ int nBytesToSkip ) throws com.sun.star.io.NotConnectedException , 221*b1cdbd2cSJim Jagielski com.sun.star.io.BufferSizeExceededException , 222*b1cdbd2cSJim Jagielski com.sun.star.io.IOException 223*b1cdbd2cSJim Jagielski { 224*b1cdbd2cSJim Jagielski //m_aProtocol.log("skipBytes("+nBytesToSkip+")\n{\n"); 225*b1cdbd2cSJim Jagielski m_bInWasUsed = true; 226*b1cdbd2cSJim Jagielski 227*b1cdbd2cSJim Jagielski if (m_xInStream == null) 228*b1cdbd2cSJim Jagielski { 229*b1cdbd2cSJim Jagielski //m_aProtocol.log("\tstream not open. throw NotConnectedException\n\tfailed\n}\n"); 230*b1cdbd2cSJim Jagielski throw new com.sun.star.io.NotConnectedException("stream not open"); 231*b1cdbd2cSJim Jagielski } 232*b1cdbd2cSJim Jagielski 233*b1cdbd2cSJim Jagielski try 234*b1cdbd2cSJim Jagielski { 235*b1cdbd2cSJim Jagielski m_xInStream.skipBytes(nBytesToSkip); 236*b1cdbd2cSJim Jagielski } 237*b1cdbd2cSJim Jagielski catch (com.sun.star.io.NotConnectedException exConnect) { //m_aProtocol.log("\tgot NotConnectedException\n\tfailed\n}\n" ); throw exConnect; 238*b1cdbd2cSJim Jagielski } 239*b1cdbd2cSJim Jagielski catch (com.sun.star.io.BufferSizeExceededException exBuffer ) { //m_aProtocol.log("\tgot BufferSizeExceededException\n\tfailed\n}\n"); throw exBuffer; 240*b1cdbd2cSJim Jagielski } 241*b1cdbd2cSJim Jagielski catch (com.sun.star.io.IOException exIO ) { //m_aProtocol.log("\tgot IOException\n\tfailed\n}\n" ); throw exIO; 242*b1cdbd2cSJim Jagielski } 243*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.RuntimeException exRuntime) { //m_aProtocol.log("\tgot RuntimeException\n\tfailed\n}\n" ); throw exRuntime; 244*b1cdbd2cSJim Jagielski } 245*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.Exception exUno ) { //m_aProtocol.log("\tgot Exception\n\tfailed\n}\n" ); 246*b1cdbd2cSJim Jagielski } 247*b1cdbd2cSJim Jagielski 248*b1cdbd2cSJim Jagielski //m_aProtocol.log("\tOK\n}\n"); 249*b1cdbd2cSJim Jagielski } 250*b1cdbd2cSJim Jagielski 251*b1cdbd2cSJim Jagielski //_________________________________ 252*b1cdbd2cSJim Jagielski available()253*b1cdbd2cSJim Jagielski public int available() throws com.sun.star.io.NotConnectedException, 254*b1cdbd2cSJim Jagielski com.sun.star.io.IOException 255*b1cdbd2cSJim Jagielski { 256*b1cdbd2cSJim Jagielski //m_aProtocol.log("available()\n{\n"); 257*b1cdbd2cSJim Jagielski m_bInWasUsed = true; 258*b1cdbd2cSJim Jagielski 259*b1cdbd2cSJim Jagielski if (m_xInStream == null) 260*b1cdbd2cSJim Jagielski { 261*b1cdbd2cSJim Jagielski //m_aProtocol.log("\tstream not open. throw NotConnectedException\n\tfailed\n}\n"); 262*b1cdbd2cSJim Jagielski throw new com.sun.star.io.NotConnectedException("stream not open"); 263*b1cdbd2cSJim Jagielski } 264*b1cdbd2cSJim Jagielski 265*b1cdbd2cSJim Jagielski int nAvailable = 0; 266*b1cdbd2cSJim Jagielski try 267*b1cdbd2cSJim Jagielski { 268*b1cdbd2cSJim Jagielski nAvailable = m_xInStream.available(); 269*b1cdbd2cSJim Jagielski } 270*b1cdbd2cSJim Jagielski catch (com.sun.star.io.NotConnectedException exConnect) { //m_aProtocol.log("\tgot NotConnectedException\n\tfailed\n}\n"); throw exConnect; 271*b1cdbd2cSJim Jagielski } 272*b1cdbd2cSJim Jagielski catch (com.sun.star.io.IOException exIO ) { //m_aProtocol.log("\tgot IOException\n\tfailed\n}\n" ); throw exIO; 273*b1cdbd2cSJim Jagielski } 274*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.RuntimeException exRuntime) { //m_aProtocol.log("\tgot RuntimeException\n\tfailed\n}\n" ); throw exRuntime; 275*b1cdbd2cSJim Jagielski } 276*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.Exception exUno ) { //m_aProtocol.log("\tgot Exception\n\tfailed\n}\n" ); 277*b1cdbd2cSJim Jagielski } 278*b1cdbd2cSJim Jagielski 279*b1cdbd2cSJim Jagielski //m_aProtocol.log("\treturns "+nAvailable+" bytes\n\tOK\n}\n"); 280*b1cdbd2cSJim Jagielski return nAvailable; 281*b1cdbd2cSJim Jagielski } 282*b1cdbd2cSJim Jagielski 283*b1cdbd2cSJim Jagielski //_________________________________ 284*b1cdbd2cSJim Jagielski closeInput()285*b1cdbd2cSJim Jagielski public void closeInput() throws com.sun.star.io.NotConnectedException, 286*b1cdbd2cSJim Jagielski com.sun.star.io.IOException 287*b1cdbd2cSJim Jagielski { 288*b1cdbd2cSJim Jagielski //m_aProtocol.log("closeInput()\n{\n"); 289*b1cdbd2cSJim Jagielski m_bInWasUsed = true; 290*b1cdbd2cSJim Jagielski 291*b1cdbd2cSJim Jagielski if (m_xInStream == null) 292*b1cdbd2cSJim Jagielski { 293*b1cdbd2cSJim Jagielski //m_aProtocol.log("\tstream not open. throw NotConnectedException\n\tfailed\n}\n"); 294*b1cdbd2cSJim Jagielski throw new com.sun.star.io.NotConnectedException("stream not open"); 295*b1cdbd2cSJim Jagielski } 296*b1cdbd2cSJim Jagielski 297*b1cdbd2cSJim Jagielski try 298*b1cdbd2cSJim Jagielski { 299*b1cdbd2cSJim Jagielski m_xInStream.closeInput(); 300*b1cdbd2cSJim Jagielski } 301*b1cdbd2cSJim Jagielski catch (com.sun.star.io.NotConnectedException exConnect) { //m_aProtocol.log("\tgot NotConnectedException\n\tfailed\n}\n"); throw exConnect; 302*b1cdbd2cSJim Jagielski } 303*b1cdbd2cSJim Jagielski catch (com.sun.star.io.IOException exIO ) { //m_aProtocol.log("\tgot IOException\n\tfailed\n}\n" ); throw exIO; 304*b1cdbd2cSJim Jagielski } 305*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.RuntimeException exRuntime) { //m_aProtocol.log("\tgot RuntimeException\n\tfailed\n}\n" ); throw exRuntime; 306*b1cdbd2cSJim Jagielski } 307*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.Exception exUno ) { //m_aProtocol.log("\tgot Exception\n\tfailed\n}\n" ); 308*b1cdbd2cSJim Jagielski } 309*b1cdbd2cSJim Jagielski 310*b1cdbd2cSJim Jagielski //m_aProtocol.log("\tOK\n}\n"); 311*b1cdbd2cSJim Jagielski } 312*b1cdbd2cSJim Jagielski 313*b1cdbd2cSJim Jagielski //_________________________________ 314*b1cdbd2cSJim Jagielski /** 315*b1cdbd2cSJim Jagielski * following methods simulates the XOutputStream. 316*b1cdbd2cSJim Jagielski * The notice all actions inside the internal protocol 317*b1cdbd2cSJim Jagielski * and try to map all neccessary functions to the internal 318*b1cdbd2cSJim Jagielski * open out-stream. 319*b1cdbd2cSJim Jagielski */ writeBytes( byte[] lData )320*b1cdbd2cSJim Jagielski public void writeBytes( /*IN*/byte[] lData ) throws com.sun.star.io.NotConnectedException , 321*b1cdbd2cSJim Jagielski com.sun.star.io.BufferSizeExceededException , 322*b1cdbd2cSJim Jagielski com.sun.star.io.IOException 323*b1cdbd2cSJim Jagielski { 324*b1cdbd2cSJim Jagielski //m_aProtocol.log("writeBytes(lData["+lData.length+"])\n{\n"); 325*b1cdbd2cSJim Jagielski m_bOutWasUsed = true; 326*b1cdbd2cSJim Jagielski 327*b1cdbd2cSJim Jagielski if (m_xOutStream == null) 328*b1cdbd2cSJim Jagielski { 329*b1cdbd2cSJim Jagielski //m_aProtocol.log("\tstream not open. throw NotConnectedException\n\tfailed\n}\n"); 330*b1cdbd2cSJim Jagielski throw new com.sun.star.io.NotConnectedException("stream not open"); 331*b1cdbd2cSJim Jagielski } 332*b1cdbd2cSJim Jagielski 333*b1cdbd2cSJim Jagielski try 334*b1cdbd2cSJim Jagielski { 335*b1cdbd2cSJim Jagielski m_xOutStream.writeBytes(lData); 336*b1cdbd2cSJim Jagielski } 337*b1cdbd2cSJim Jagielski catch (com.sun.star.io.NotConnectedException exConnect) { //m_aProtocol.log("\tgot NotConnectedException\n\tfailed\n}\n" ); throw exConnect; 338*b1cdbd2cSJim Jagielski } 339*b1cdbd2cSJim Jagielski catch (com.sun.star.io.BufferSizeExceededException exBuffer ) { //m_aProtocol.log("\tgot BufferSizeExceededException\n\tfailed\n}\n"); throw exBuffer; 340*b1cdbd2cSJim Jagielski } 341*b1cdbd2cSJim Jagielski catch (com.sun.star.io.IOException exIO ) { //m_aProtocol.log("\tgot IOException\n\tfailed\n}\n" ); throw exIO; 342*b1cdbd2cSJim Jagielski } 343*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.RuntimeException exRuntime) { //m_aProtocol.log("\tgot RuntimeException\n\tfailed\n}\n" ); throw exRuntime; 344*b1cdbd2cSJim Jagielski } 345*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.Exception exUno ) { //m_aProtocol.log("\tgot Exception\n\tfailed\n}\n" ); 346*b1cdbd2cSJim Jagielski } 347*b1cdbd2cSJim Jagielski 348*b1cdbd2cSJim Jagielski //m_aProtocol.log("\tOK\n}\n"); 349*b1cdbd2cSJim Jagielski } 350*b1cdbd2cSJim Jagielski 351*b1cdbd2cSJim Jagielski //_________________________________ 352*b1cdbd2cSJim Jagielski flush()353*b1cdbd2cSJim Jagielski public void flush() throws com.sun.star.io.NotConnectedException , 354*b1cdbd2cSJim Jagielski com.sun.star.io.BufferSizeExceededException , 355*b1cdbd2cSJim Jagielski com.sun.star.io.IOException 356*b1cdbd2cSJim Jagielski { 357*b1cdbd2cSJim Jagielski //m_aProtocol.log("flush()\n{\n"); 358*b1cdbd2cSJim Jagielski m_bOutWasUsed = true; 359*b1cdbd2cSJim Jagielski 360*b1cdbd2cSJim Jagielski if (m_xOutStream == null) 361*b1cdbd2cSJim Jagielski { 362*b1cdbd2cSJim Jagielski //m_aProtocol.log("\tstream not open. throw NotConnectedException\n\tfailed\n}\n"); 363*b1cdbd2cSJim Jagielski throw new com.sun.star.io.NotConnectedException("stream not open"); 364*b1cdbd2cSJim Jagielski } 365*b1cdbd2cSJim Jagielski 366*b1cdbd2cSJim Jagielski try 367*b1cdbd2cSJim Jagielski { 368*b1cdbd2cSJim Jagielski m_xOutStream.flush(); 369*b1cdbd2cSJim Jagielski } 370*b1cdbd2cSJim Jagielski catch (com.sun.star.io.NotConnectedException exConnect) { //m_aProtocol.log("\tgot NotConnectedException\n\tfailed\n}\n" ); throw exConnect; 371*b1cdbd2cSJim Jagielski } 372*b1cdbd2cSJim Jagielski catch (com.sun.star.io.BufferSizeExceededException exBuffer ) { //m_aProtocol.log("\tgot BufferSizeExceededException\n\tfailed\n}\n"); throw exBuffer; 373*b1cdbd2cSJim Jagielski } 374*b1cdbd2cSJim Jagielski catch (com.sun.star.io.IOException exIO ) { //m_aProtocol.log("\tgot IOException\n\tfailed\n}\n" ); throw exIO; 375*b1cdbd2cSJim Jagielski } 376*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.RuntimeException exRuntime) { //m_aProtocol.log("\tgot RuntimeException\n\tfailed\n}\n" ); throw exRuntime; 377*b1cdbd2cSJim Jagielski } 378*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.Exception exUno ) { //m_aProtocol.log("\tgot Exception\n\tfailed\n}\n" ); 379*b1cdbd2cSJim Jagielski } 380*b1cdbd2cSJim Jagielski //m_aProtocol.log("\tOK\n}\n"); 381*b1cdbd2cSJim Jagielski } 382*b1cdbd2cSJim Jagielski 383*b1cdbd2cSJim Jagielski //_________________________________ 384*b1cdbd2cSJim Jagielski closeOutput()385*b1cdbd2cSJim Jagielski public void closeOutput() throws com.sun.star.io.NotConnectedException , 386*b1cdbd2cSJim Jagielski com.sun.star.io.BufferSizeExceededException, 387*b1cdbd2cSJim Jagielski com.sun.star.io.IOException 388*b1cdbd2cSJim Jagielski { 389*b1cdbd2cSJim Jagielski //m_aProtocol.log("closeOutput()\n{\n"); 390*b1cdbd2cSJim Jagielski m_bOutWasUsed = true; 391*b1cdbd2cSJim Jagielski 392*b1cdbd2cSJim Jagielski if (m_xOutStream == null) 393*b1cdbd2cSJim Jagielski { 394*b1cdbd2cSJim Jagielski //m_aProtocol.log("\tstream not open. throw NotConnectedException\n\tfailed\n}\n"); 395*b1cdbd2cSJim Jagielski throw new com.sun.star.io.NotConnectedException("stream not open"); 396*b1cdbd2cSJim Jagielski } 397*b1cdbd2cSJim Jagielski 398*b1cdbd2cSJim Jagielski try 399*b1cdbd2cSJim Jagielski { 400*b1cdbd2cSJim Jagielski m_xOutStream.closeOutput(); 401*b1cdbd2cSJim Jagielski } 402*b1cdbd2cSJim Jagielski catch (com.sun.star.io.NotConnectedException exConnect) { //m_aProtocol.log("\tgot NotConnectedException\n\tfailed\n}\n" ); throw exConnect; 403*b1cdbd2cSJim Jagielski } 404*b1cdbd2cSJim Jagielski catch (com.sun.star.io.BufferSizeExceededException exBuffer ) { //m_aProtocol.log("\tgot BufferSizeExceededException\n\tfailed\n}\n"); throw exBuffer; 405*b1cdbd2cSJim Jagielski } 406*b1cdbd2cSJim Jagielski catch (com.sun.star.io.IOException exIO ) { //m_aProtocol.log("\tgot IOException\n\tfailed\n}\n" ); throw exIO; 407*b1cdbd2cSJim Jagielski } 408*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.RuntimeException exRuntime) { //m_aProtocol.log("\tgot RuntimeException\n\tfailed\n}\n" ); throw exRuntime; 409*b1cdbd2cSJim Jagielski } 410*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.Exception exUno ) { //m_aProtocol.log("\tgot Exception\n\tfailed\n}\n" ); 411*b1cdbd2cSJim Jagielski } 412*b1cdbd2cSJim Jagielski 413*b1cdbd2cSJim Jagielski //m_aProtocol.log("\tOK\n}\n"); 414*b1cdbd2cSJim Jagielski } 415*b1cdbd2cSJim Jagielski 416*b1cdbd2cSJim Jagielski //_________________________________ 417*b1cdbd2cSJim Jagielski /** 418*b1cdbd2cSJim Jagielski * following methods simulates the XSeekable. 419*b1cdbd2cSJim Jagielski * The notice all actions inside the internal protocol 420*b1cdbd2cSJim Jagielski * and try to map all neccessary functions to the internal 421*b1cdbd2cSJim Jagielski * open stream. 422*b1cdbd2cSJim Jagielski */ seek( long nLocation )423*b1cdbd2cSJim Jagielski public void seek( /*IN*/long nLocation ) throws com.sun.star.lang.IllegalArgumentException, 424*b1cdbd2cSJim Jagielski com.sun.star.io.IOException 425*b1cdbd2cSJim Jagielski { 426*b1cdbd2cSJim Jagielski //m_aProtocol.log("seek("+nLocation+")\n{\n"); 427*b1cdbd2cSJim Jagielski 428*b1cdbd2cSJim Jagielski if (m_xInStream != null) 429*b1cdbd2cSJim Jagielski m_bInWasUsed = true; 430*b1cdbd2cSJim Jagielski else 431*b1cdbd2cSJim Jagielski if (m_xOutStream != null) 432*b1cdbd2cSJim Jagielski m_bOutWasUsed = true; 433*b1cdbd2cSJim Jagielski else 434*b1cdbd2cSJim Jagielski //m_aProtocol.log("\tno stream open!\n"); 435*b1cdbd2cSJim Jagielski 436*b1cdbd2cSJim Jagielski if (m_xSeek == null) 437*b1cdbd2cSJim Jagielski { 438*b1cdbd2cSJim Jagielski //m_aProtocol.log("\tstream not seekable. throw IOException\n\tfailed\n}\n"); 439*b1cdbd2cSJim Jagielski throw new com.sun.star.io.IOException("stream not seekable"); 440*b1cdbd2cSJim Jagielski } 441*b1cdbd2cSJim Jagielski 442*b1cdbd2cSJim Jagielski try 443*b1cdbd2cSJim Jagielski { 444*b1cdbd2cSJim Jagielski m_xSeek.seek(nLocation); 445*b1cdbd2cSJim Jagielski } 446*b1cdbd2cSJim Jagielski catch (com.sun.star.lang.IllegalArgumentException exArg ) { //m_aProtocol.log("\tgot IllegalArgumentException\n\tfailed\n}\n" ); throw exArg; 447*b1cdbd2cSJim Jagielski } 448*b1cdbd2cSJim Jagielski catch (com.sun.star.io.IOException exIO ) { //m_aProtocol.log("\tgot IOException\n\tfailed\n}\n" ); throw exIO; 449*b1cdbd2cSJim Jagielski } 450*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.RuntimeException exRuntime) { //m_aProtocol.log("\tgot RuntimeException\n\tfailed\n}\n" ); throw exRuntime; 451*b1cdbd2cSJim Jagielski } 452*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.Exception exUno ) { //m_aProtocol.log("\tgot Exception\n\tfailed\n}\n" ); 453*b1cdbd2cSJim Jagielski } 454*b1cdbd2cSJim Jagielski 455*b1cdbd2cSJim Jagielski //m_aProtocol.log("\tOK\n}\n"); 456*b1cdbd2cSJim Jagielski } 457*b1cdbd2cSJim Jagielski 458*b1cdbd2cSJim Jagielski //_________________________________ 459*b1cdbd2cSJim Jagielski getPosition()460*b1cdbd2cSJim Jagielski public long getPosition() throws com.sun.star.io.IOException 461*b1cdbd2cSJim Jagielski { 462*b1cdbd2cSJim Jagielski //m_aProtocol.log("getPosition()\n{\n"); 463*b1cdbd2cSJim Jagielski 464*b1cdbd2cSJim Jagielski if (m_xInStream != null) 465*b1cdbd2cSJim Jagielski m_bInWasUsed = true; 466*b1cdbd2cSJim Jagielski else 467*b1cdbd2cSJim Jagielski if (m_xOutStream != null) 468*b1cdbd2cSJim Jagielski m_bOutWasUsed = true; 469*b1cdbd2cSJim Jagielski else 470*b1cdbd2cSJim Jagielski //m_aProtocol.log("\tno stream open!\n"); 471*b1cdbd2cSJim Jagielski 472*b1cdbd2cSJim Jagielski if (m_xSeek == null) 473*b1cdbd2cSJim Jagielski { 474*b1cdbd2cSJim Jagielski //m_aProtocol.log("\tstream not seekable. throw IOException\n\tfailed\n}\n"); 475*b1cdbd2cSJim Jagielski throw new com.sun.star.io.IOException("stream not seekable"); 476*b1cdbd2cSJim Jagielski } 477*b1cdbd2cSJim Jagielski 478*b1cdbd2cSJim Jagielski long nPos = 0; 479*b1cdbd2cSJim Jagielski try 480*b1cdbd2cSJim Jagielski { 481*b1cdbd2cSJim Jagielski nPos = m_xSeek.getPosition(); 482*b1cdbd2cSJim Jagielski } 483*b1cdbd2cSJim Jagielski catch (com.sun.star.io.IOException exIO ) { //m_aProtocol.log("\tgot IOException\n\tfailed\n}\n" ); throw exIO; 484*b1cdbd2cSJim Jagielski } 485*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.RuntimeException exRuntime) { //m_aProtocol.log("\tgot RuntimeException\n\tfailed\n}\n"); throw exRuntime; 486*b1cdbd2cSJim Jagielski } 487*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.Exception exUno ) { //m_aProtocol.log("\tgot Exception\n\tfailed\n}\n" ); 488*b1cdbd2cSJim Jagielski } 489*b1cdbd2cSJim Jagielski 490*b1cdbd2cSJim Jagielski //m_aProtocol.log("\treturns pos="+nPos+"\n\tOK\n}\n"); 491*b1cdbd2cSJim Jagielski return nPos; 492*b1cdbd2cSJim Jagielski } 493*b1cdbd2cSJim Jagielski 494*b1cdbd2cSJim Jagielski //_________________________________ 495*b1cdbd2cSJim Jagielski getLength()496*b1cdbd2cSJim Jagielski public long getLength() throws com.sun.star.io.IOException 497*b1cdbd2cSJim Jagielski { 498*b1cdbd2cSJim Jagielski //m_aProtocol.log("getLength()\n{\n"); 499*b1cdbd2cSJim Jagielski 500*b1cdbd2cSJim Jagielski if (m_xInStream != null) 501*b1cdbd2cSJim Jagielski m_bInWasUsed = true; 502*b1cdbd2cSJim Jagielski else 503*b1cdbd2cSJim Jagielski if (m_xOutStream != null) 504*b1cdbd2cSJim Jagielski m_bOutWasUsed = true; 505*b1cdbd2cSJim Jagielski else 506*b1cdbd2cSJim Jagielski //m_aProtocol.log("\tno stream open!\n"); 507*b1cdbd2cSJim Jagielski 508*b1cdbd2cSJim Jagielski if (m_xSeek == null) 509*b1cdbd2cSJim Jagielski { 510*b1cdbd2cSJim Jagielski //m_aProtocol.log("\tstream not seekable. throw IOException\n\tfailed\n}\n"); 511*b1cdbd2cSJim Jagielski throw new com.sun.star.io.IOException("stream not seekable"); 512*b1cdbd2cSJim Jagielski } 513*b1cdbd2cSJim Jagielski 514*b1cdbd2cSJim Jagielski long nLen = 0; 515*b1cdbd2cSJim Jagielski try 516*b1cdbd2cSJim Jagielski { 517*b1cdbd2cSJim Jagielski nLen = m_xSeek.getLength(); 518*b1cdbd2cSJim Jagielski } 519*b1cdbd2cSJim Jagielski catch (com.sun.star.io.IOException exIO ) { //m_aProtocol.log("\tgot IOException\n\tfailed\n}\n" ); throw exIO; 520*b1cdbd2cSJim Jagielski } 521*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.RuntimeException exRuntime) { //m_aProtocol.log("\tgot RuntimeException\n\tfailed\n}\n"); throw exRuntime; 522*b1cdbd2cSJim Jagielski } 523*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.Exception exUno ) { //m_aProtocol.log("\tgot Exception\n\tfailed\n}\n" ); 524*b1cdbd2cSJim Jagielski } 525*b1cdbd2cSJim Jagielski 526*b1cdbd2cSJim Jagielski //m_aProtocol.log("\treturns len="+nLen+"\n\tOK\n}\n"); 527*b1cdbd2cSJim Jagielski return nLen; 528*b1cdbd2cSJim Jagielski } 529*b1cdbd2cSJim Jagielski } 530