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