xref: /trunk/main/odk/examples/java/Storage/TestHelper.java (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir package storagetesting;
2*cdf0e10cSrcweir 
3*cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime;
4*cdf0e10cSrcweir import com.sun.star.uno.XInterface;
5*cdf0e10cSrcweir import com.sun.star.uno.AnyConverter;
6*cdf0e10cSrcweir 
7*cdf0e10cSrcweir import com.sun.star.lang.*;
8*cdf0e10cSrcweir import com.sun.star.embed.*;
9*cdf0e10cSrcweir import com.sun.star.packages.*;
10*cdf0e10cSrcweir import com.sun.star.io.*;
11*cdf0e10cSrcweir import com.sun.star.beans.*;
12*cdf0e10cSrcweir 
13*cdf0e10cSrcweir public class TestHelper  {
14*cdf0e10cSrcweir 
15*cdf0e10cSrcweir     String m_sTestPrefix;
16*cdf0e10cSrcweir 
17*cdf0e10cSrcweir     public TestHelper( String sTestPrefix )
18*cdf0e10cSrcweir     {
19*cdf0e10cSrcweir         m_sTestPrefix = sTestPrefix;
20*cdf0e10cSrcweir     }
21*cdf0e10cSrcweir 
22*cdf0e10cSrcweir     public boolean WriteBytesToStream( XStream xStream,
23*cdf0e10cSrcweir                                         String sStreamName,
24*cdf0e10cSrcweir                                         String sMediaType,
25*cdf0e10cSrcweir                                         boolean bCompressed,
26*cdf0e10cSrcweir                                         byte[] pBytes )
27*cdf0e10cSrcweir     {
28*cdf0e10cSrcweir         // get output stream of substream
29*cdf0e10cSrcweir         XOutputStream xOutput = xStream.getOutputStream();
30*cdf0e10cSrcweir         if ( xOutput == null )
31*cdf0e10cSrcweir         {
32*cdf0e10cSrcweir             Error( "Can't get XOutputStream implementation from substream '" + sStreamName + "'!" );
33*cdf0e10cSrcweir             return false;
34*cdf0e10cSrcweir         }
35*cdf0e10cSrcweir 
36*cdf0e10cSrcweir         // get XTrucate implementation from output stream
37*cdf0e10cSrcweir         XTruncate xTruncate = (XTruncate) UnoRuntime.queryInterface( XTruncate.class, xOutput );
38*cdf0e10cSrcweir         if ( xTruncate == null )
39*cdf0e10cSrcweir         {
40*cdf0e10cSrcweir             Error( "Can't get XTruncate implementation from substream '" + sStreamName + "'!" );
41*cdf0e10cSrcweir             return false;
42*cdf0e10cSrcweir         }
43*cdf0e10cSrcweir 
44*cdf0e10cSrcweir         // write requested byte sequence
45*cdf0e10cSrcweir         try
46*cdf0e10cSrcweir         {
47*cdf0e10cSrcweir             xTruncate.truncate();
48*cdf0e10cSrcweir             xOutput.writeBytes( pBytes );
49*cdf0e10cSrcweir         }
50*cdf0e10cSrcweir         catch( Exception e )
51*cdf0e10cSrcweir         {
52*cdf0e10cSrcweir             Error( "Can't write to stream '" + sStreamName + "', exception: " + e );
53*cdf0e10cSrcweir             return false;
54*cdf0e10cSrcweir         }
55*cdf0e10cSrcweir 
56*cdf0e10cSrcweir         // get access to the XPropertySet interface
57*cdf0e10cSrcweir         XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface( XPropertySet.class, xStream );
58*cdf0e10cSrcweir         if ( xPropSet == null )
59*cdf0e10cSrcweir         {
60*cdf0e10cSrcweir             Error( "Can't get XPropertySet implementation from substream '" + sStreamName + "'!" );
61*cdf0e10cSrcweir             return false;
62*cdf0e10cSrcweir         }
63*cdf0e10cSrcweir 
64*cdf0e10cSrcweir         // set properties to the stream
65*cdf0e10cSrcweir         try
66*cdf0e10cSrcweir         {
67*cdf0e10cSrcweir             xPropSet.setPropertyValue( "MediaType", sMediaType );
68*cdf0e10cSrcweir             xPropSet.setPropertyValue( "Compressed", new Boolean( bCompressed ) );
69*cdf0e10cSrcweir         }
70*cdf0e10cSrcweir         catch( Exception e )
71*cdf0e10cSrcweir         {
72*cdf0e10cSrcweir             Error( "Can't set properties to substream '" + sStreamName + "', exception: " + e );
73*cdf0e10cSrcweir             return false;
74*cdf0e10cSrcweir         }
75*cdf0e10cSrcweir 
76*cdf0e10cSrcweir         // check size property of the stream
77*cdf0e10cSrcweir         try
78*cdf0e10cSrcweir         {
79*cdf0e10cSrcweir             int nSize = AnyConverter.toInt( xPropSet.getPropertyValue( "Size" ) );
80*cdf0e10cSrcweir             if ( nSize != pBytes.length )
81*cdf0e10cSrcweir             {
82*cdf0e10cSrcweir                 Error( "The 'Size' property of substream '" + sStreamName + "' contains wrong value!" );
83*cdf0e10cSrcweir                 return false;
84*cdf0e10cSrcweir             }
85*cdf0e10cSrcweir         }
86*cdf0e10cSrcweir         catch( Exception e )
87*cdf0e10cSrcweir         {
88*cdf0e10cSrcweir             Error( "Can't get 'Size' property from substream '" + sStreamName + "', exception: " + e );
89*cdf0e10cSrcweir             return false;
90*cdf0e10cSrcweir         }
91*cdf0e10cSrcweir 
92*cdf0e10cSrcweir         // free the stream resources, garbage collector may remove the object too late
93*cdf0e10cSrcweir         XComponent xComponent = (XComponent) UnoRuntime.queryInterface( XComponent.class, xStream );
94*cdf0e10cSrcweir         if ( xComponent == null )
95*cdf0e10cSrcweir         {
96*cdf0e10cSrcweir             Error( "Can't get XComponent implementation from substream '" + sStreamName + "'!" );
97*cdf0e10cSrcweir             return false;
98*cdf0e10cSrcweir         }
99*cdf0e10cSrcweir         xComponent.dispose();
100*cdf0e10cSrcweir 
101*cdf0e10cSrcweir         return true;
102*cdf0e10cSrcweir     }
103*cdf0e10cSrcweir 
104*cdf0e10cSrcweir 
105*cdf0e10cSrcweir     public boolean WriteBytesToSubstream( XStorage xStorage,
106*cdf0e10cSrcweir                                           String sStreamName,
107*cdf0e10cSrcweir                                           String sMediaType,
108*cdf0e10cSrcweir                                           boolean bCompressed,
109*cdf0e10cSrcweir                                           byte[] pBytes )
110*cdf0e10cSrcweir     {
111*cdf0e10cSrcweir         // open substream element
112*cdf0e10cSrcweir         XStream xSubStream = null;
113*cdf0e10cSrcweir         try
114*cdf0e10cSrcweir         {
115*cdf0e10cSrcweir             Object oSubStream = xStorage.openStreamElement( sStreamName, ElementModes.ELEMENT_WRITE );
116*cdf0e10cSrcweir             xSubStream = (XStream) UnoRuntime.queryInterface( XStream.class, oSubStream );
117*cdf0e10cSrcweir             if ( xSubStream == null )
118*cdf0e10cSrcweir             {
119*cdf0e10cSrcweir                 Error( "Can't create substream '" + sStreamName + "'!" );
120*cdf0e10cSrcweir                 return false;
121*cdf0e10cSrcweir             }
122*cdf0e10cSrcweir         }
123*cdf0e10cSrcweir         catch( Exception e )
124*cdf0e10cSrcweir         {
125*cdf0e10cSrcweir             Error( "Can't create substream '" + sStreamName + "', exception : " + e + "!" );
126*cdf0e10cSrcweir             return false;
127*cdf0e10cSrcweir         }
128*cdf0e10cSrcweir 
129*cdf0e10cSrcweir         return WriteBytesToStream( xSubStream, sStreamName, sMediaType, bCompressed, pBytes );
130*cdf0e10cSrcweir     }
131*cdf0e10cSrcweir 
132*cdf0e10cSrcweir     public boolean WriteBytesToEncrSubstream( XStorage xStorage,
133*cdf0e10cSrcweir                                               String sStreamName,
134*cdf0e10cSrcweir                                               String sMediaType,
135*cdf0e10cSrcweir                                               boolean bCompressed,
136*cdf0e10cSrcweir                                               byte[] pBytes,
137*cdf0e10cSrcweir                                               byte[] pPass )
138*cdf0e10cSrcweir     {
139*cdf0e10cSrcweir         // open substream element
140*cdf0e10cSrcweir         XStream xSubStream = null;
141*cdf0e10cSrcweir         try
142*cdf0e10cSrcweir         {
143*cdf0e10cSrcweir             Object oSubStream = xStorage.openEncryptedStreamElement( sStreamName, ElementModes.ELEMENT_WRITE, pPass );
144*cdf0e10cSrcweir             xSubStream = (XStream) UnoRuntime.queryInterface( XStream.class, oSubStream );
145*cdf0e10cSrcweir             if ( xSubStream == null )
146*cdf0e10cSrcweir             {
147*cdf0e10cSrcweir                 Error( "Can't create substream '" + sStreamName + "'!" );
148*cdf0e10cSrcweir                 return false;
149*cdf0e10cSrcweir             }
150*cdf0e10cSrcweir         }
151*cdf0e10cSrcweir         catch( Exception e )
152*cdf0e10cSrcweir         {
153*cdf0e10cSrcweir             Error( "Can't create substream '" + sStreamName + "', exception : " + e + "!" );
154*cdf0e10cSrcweir             return false;
155*cdf0e10cSrcweir         }
156*cdf0e10cSrcweir 
157*cdf0e10cSrcweir         return WriteBytesToStream( xSubStream, sStreamName, sMediaType, bCompressed, pBytes );
158*cdf0e10cSrcweir     }
159*cdf0e10cSrcweir 
160*cdf0e10cSrcweir     public boolean WBToSubstrOfEncr( XStorage xStorage,
161*cdf0e10cSrcweir                                               String sStreamName,
162*cdf0e10cSrcweir                                               String sMediaType,
163*cdf0e10cSrcweir                                               boolean bCompressed,
164*cdf0e10cSrcweir                                               byte[] pBytes,
165*cdf0e10cSrcweir                                               boolean bEncrypted )
166*cdf0e10cSrcweir     {
167*cdf0e10cSrcweir         // open substream element
168*cdf0e10cSrcweir         XStream xSubStream = null;
169*cdf0e10cSrcweir         try
170*cdf0e10cSrcweir         {
171*cdf0e10cSrcweir             Object oSubStream = xStorage.openStreamElement( sStreamName, ElementModes.ELEMENT_WRITE );
172*cdf0e10cSrcweir             xSubStream = (XStream) UnoRuntime.queryInterface( XStream.class, oSubStream );
173*cdf0e10cSrcweir             if ( xSubStream == null )
174*cdf0e10cSrcweir             {
175*cdf0e10cSrcweir                 Error( "Can't create substream '" + sStreamName + "'!" );
176*cdf0e10cSrcweir                 return false;
177*cdf0e10cSrcweir             }
178*cdf0e10cSrcweir         }
179*cdf0e10cSrcweir         catch( Exception e )
180*cdf0e10cSrcweir         {
181*cdf0e10cSrcweir             Error( "Can't create substream '" + sStreamName + "', exception : " + e + "!" );
182*cdf0e10cSrcweir             return false;
183*cdf0e10cSrcweir         }
184*cdf0e10cSrcweir 
185*cdf0e10cSrcweir         // get access to the XPropertySet interface
186*cdf0e10cSrcweir         XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface( XPropertySet.class, xSubStream );
187*cdf0e10cSrcweir         if ( xPropSet == null )
188*cdf0e10cSrcweir         {
189*cdf0e10cSrcweir             Error( "Can't get XPropertySet implementation from substream '" + sStreamName + "'!" );
190*cdf0e10cSrcweir             return false;
191*cdf0e10cSrcweir         }
192*cdf0e10cSrcweir 
193*cdf0e10cSrcweir         // set properties to the stream
194*cdf0e10cSrcweir         try
195*cdf0e10cSrcweir         {
196*cdf0e10cSrcweir             xPropSet.setPropertyValue( "Encrypted", new Boolean( bEncrypted ) );
197*cdf0e10cSrcweir         }
198*cdf0e10cSrcweir         catch( Exception e )
199*cdf0e10cSrcweir         {
200*cdf0e10cSrcweir             Error( "Can't set 'Encrypted' property to substream '" + sStreamName + "', exception: " + e );
201*cdf0e10cSrcweir             return false;
202*cdf0e10cSrcweir         }
203*cdf0e10cSrcweir 
204*cdf0e10cSrcweir         return WriteBytesToStream( xSubStream, sStreamName, sMediaType, bCompressed, pBytes );
205*cdf0e10cSrcweir     }
206*cdf0e10cSrcweir 
207*cdf0e10cSrcweir     public int ChangeStreamPass( XStorage xStorage,
208*cdf0e10cSrcweir                                  String sStreamName,
209*cdf0e10cSrcweir                                  byte[] pOldPass,
210*cdf0e10cSrcweir                                  byte[] pNewPass )
211*cdf0e10cSrcweir     {
212*cdf0e10cSrcweir         // open substream element
213*cdf0e10cSrcweir         XStream xSubStream = null;
214*cdf0e10cSrcweir         try
215*cdf0e10cSrcweir         {
216*cdf0e10cSrcweir             Object oSubStream = xStorage.openEncryptedStreamElement( sStreamName, ElementModes.ELEMENT_WRITE, pOldPass );
217*cdf0e10cSrcweir             xSubStream = (XStream) UnoRuntime.queryInterface( XStream.class, oSubStream );
218*cdf0e10cSrcweir             if ( xSubStream == null )
219*cdf0e10cSrcweir             {
220*cdf0e10cSrcweir                 Error( "Can't open substream '" + sStreamName + "'!" );
221*cdf0e10cSrcweir                 return 0;
222*cdf0e10cSrcweir             }
223*cdf0e10cSrcweir         }
224*cdf0e10cSrcweir         catch( Exception e )
225*cdf0e10cSrcweir         {
226*cdf0e10cSrcweir             Error( "Can't open substream '" + sStreamName + "', exception : " + e + "!" );
227*cdf0e10cSrcweir             return 0;
228*cdf0e10cSrcweir         }
229*cdf0e10cSrcweir 
230*cdf0e10cSrcweir 
231*cdf0e10cSrcweir         // change the password for the stream
232*cdf0e10cSrcweir         XEncryptionProtectedSource xStreamEncryption =
233*cdf0e10cSrcweir                 (XEncryptionProtectedSource) UnoRuntime.queryInterface( XEncryptionProtectedSource.class, xSubStream );
234*cdf0e10cSrcweir 
235*cdf0e10cSrcweir         if ( xStreamEncryption == null )
236*cdf0e10cSrcweir         {
237*cdf0e10cSrcweir             Message( "Optional interface XEncryptionProtectedSource is not implemented, feature can not be tested!" );
238*cdf0e10cSrcweir             return -1;
239*cdf0e10cSrcweir         }
240*cdf0e10cSrcweir 
241*cdf0e10cSrcweir         try {
242*cdf0e10cSrcweir             xStreamEncryption.setEncryptionKey( pNewPass );
243*cdf0e10cSrcweir         }
244*cdf0e10cSrcweir         catch( Exception e )
245*cdf0e10cSrcweir         {
246*cdf0e10cSrcweir             Error( "Can't change encryption key of the substream '" + sStreamName + "', exception:" + e );
247*cdf0e10cSrcweir             return 0;
248*cdf0e10cSrcweir         }
249*cdf0e10cSrcweir 
250*cdf0e10cSrcweir         // free the stream resources, garbage collector may remove the object too late
251*cdf0e10cSrcweir         XComponent xComponent = (XComponent) UnoRuntime.queryInterface( XComponent.class, xSubStream );
252*cdf0e10cSrcweir         if ( xComponent == null )
253*cdf0e10cSrcweir         {
254*cdf0e10cSrcweir             Error( "Can't get XComponent implementation from substream '" + sStreamName + "'!" );
255*cdf0e10cSrcweir             return 0;
256*cdf0e10cSrcweir         }
257*cdf0e10cSrcweir         xComponent.dispose();
258*cdf0e10cSrcweir 
259*cdf0e10cSrcweir         return 1;
260*cdf0e10cSrcweir     }
261*cdf0e10cSrcweir 
262*cdf0e10cSrcweir     public boolean setStorageTypeAndCheckProps( XStorage xStorage, String sMediaType, boolean bIsRoot, int nMode )
263*cdf0e10cSrcweir     {
264*cdf0e10cSrcweir         boolean bOk = false;
265*cdf0e10cSrcweir 
266*cdf0e10cSrcweir         // get access to the XPropertySet interface
267*cdf0e10cSrcweir         XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface( XPropertySet.class, xStorage );
268*cdf0e10cSrcweir         if ( xPropSet != null )
269*cdf0e10cSrcweir         {
270*cdf0e10cSrcweir             try
271*cdf0e10cSrcweir             {
272*cdf0e10cSrcweir                 // set "MediaType" property to the stream
273*cdf0e10cSrcweir                 xPropSet.setPropertyValue( "MediaType", sMediaType );
274*cdf0e10cSrcweir 
275*cdf0e10cSrcweir                 // get "IsRoot" and "OpenMode" properties and control there values
276*cdf0e10cSrcweir                 boolean bPropIsRoot = AnyConverter.toBoolean( xPropSet.getPropertyValue( "IsRoot" ) );
277*cdf0e10cSrcweir                 int nPropMode = AnyConverter.toInt( xPropSet.getPropertyValue( "OpenMode" ) );
278*cdf0e10cSrcweir 
279*cdf0e10cSrcweir                 bOk = true;
280*cdf0e10cSrcweir                 if ( bPropIsRoot != bIsRoot )
281*cdf0e10cSrcweir                 {
282*cdf0e10cSrcweir                     Error( "'IsRoot' property contains wrong value!" );
283*cdf0e10cSrcweir                     bOk = false;
284*cdf0e10cSrcweir                 }
285*cdf0e10cSrcweir 
286*cdf0e10cSrcweir                 if ( ( bIsRoot && ( nPropMode | ElementModes.ELEMENT_READ ) != ( nMode | ElementModes.ELEMENT_READ ) )
287*cdf0e10cSrcweir                   || ( !bIsRoot && ( nPropMode & nMode ) != nMode ) )
288*cdf0e10cSrcweir                 {
289*cdf0e10cSrcweir                     Error( "'OpenMode' property contains wrong value!" );
290*cdf0e10cSrcweir                     bOk = false;
291*cdf0e10cSrcweir                 }
292*cdf0e10cSrcweir             }
293*cdf0e10cSrcweir             catch( Exception e )
294*cdf0e10cSrcweir             {
295*cdf0e10cSrcweir                 Error( "Can't control properties of substorage, exception: " + e );
296*cdf0e10cSrcweir             }
297*cdf0e10cSrcweir         }
298*cdf0e10cSrcweir         else
299*cdf0e10cSrcweir         {
300*cdf0e10cSrcweir             Error( "Can't get XPropertySet implementation from storage!" );
301*cdf0e10cSrcweir         }
302*cdf0e10cSrcweir 
303*cdf0e10cSrcweir         return bOk;
304*cdf0e10cSrcweir     }
305*cdf0e10cSrcweir 
306*cdf0e10cSrcweir     public boolean checkStorageProperties( XStorage xStorage, String sMediaType, boolean bIsRoot, int nMode )
307*cdf0e10cSrcweir     {
308*cdf0e10cSrcweir         boolean bOk = false;
309*cdf0e10cSrcweir 
310*cdf0e10cSrcweir         // get access to the XPropertySet interface
311*cdf0e10cSrcweir         XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface( XPropertySet.class, xStorage );
312*cdf0e10cSrcweir         if ( xPropSet != null )
313*cdf0e10cSrcweir         {
314*cdf0e10cSrcweir             try
315*cdf0e10cSrcweir             {
316*cdf0e10cSrcweir                 // get "MediaType", "IsRoot" and "OpenMode" properties and control there values
317*cdf0e10cSrcweir                 String sPropMediaType = AnyConverter.toString( xPropSet.getPropertyValue( "MediaType" ) );
318*cdf0e10cSrcweir                 boolean bPropIsRoot = AnyConverter.toBoolean( xPropSet.getPropertyValue( "IsRoot" ) );
319*cdf0e10cSrcweir                 int nPropMode = AnyConverter.toInt( xPropSet.getPropertyValue( "OpenMode" ) );
320*cdf0e10cSrcweir 
321*cdf0e10cSrcweir                 bOk = true;
322*cdf0e10cSrcweir                 if ( !sPropMediaType.equals( sMediaType ) )
323*cdf0e10cSrcweir                 {
324*cdf0e10cSrcweir                     Error( "'MediaType' property contains wrong value, expected '"
325*cdf0e10cSrcweir                             + sMediaType + "', set '" + sPropMediaType + "' !" );
326*cdf0e10cSrcweir                     bOk = false;
327*cdf0e10cSrcweir                 }
328*cdf0e10cSrcweir 
329*cdf0e10cSrcweir                 if ( bPropIsRoot != bIsRoot )
330*cdf0e10cSrcweir                 {
331*cdf0e10cSrcweir                     Error( "'IsRoot' property contains wrong value!" );
332*cdf0e10cSrcweir                     bOk = false;
333*cdf0e10cSrcweir                 }
334*cdf0e10cSrcweir 
335*cdf0e10cSrcweir                 if ( ( bIsRoot && ( nPropMode | ElementModes.ELEMENT_READ ) != ( nMode | ElementModes.ELEMENT_READ ) )
336*cdf0e10cSrcweir                   || ( !bIsRoot && ( nPropMode & nMode ) != nMode ) )
337*cdf0e10cSrcweir                 {
338*cdf0e10cSrcweir                     Error( "'OpenMode' property contains wrong value!" );
339*cdf0e10cSrcweir                     bOk = false;
340*cdf0e10cSrcweir                 }
341*cdf0e10cSrcweir             }
342*cdf0e10cSrcweir             catch( Exception e )
343*cdf0e10cSrcweir             {
344*cdf0e10cSrcweir                 Error( "Can't get properties of substorage, exception: " + e );
345*cdf0e10cSrcweir             }
346*cdf0e10cSrcweir         }
347*cdf0e10cSrcweir         else
348*cdf0e10cSrcweir         {
349*cdf0e10cSrcweir             Error( "Can't get XPropertySet implementation from storage!" );
350*cdf0e10cSrcweir         }
351*cdf0e10cSrcweir 
352*cdf0e10cSrcweir         return bOk;
353*cdf0e10cSrcweir     }
354*cdf0e10cSrcweir 
355*cdf0e10cSrcweir     public boolean InternalCheckStream( XStream xStream,
356*cdf0e10cSrcweir                                         String sName,
357*cdf0e10cSrcweir                                         String sMediaType,
358*cdf0e10cSrcweir                                         byte[] pBytes )
359*cdf0e10cSrcweir     {
360*cdf0e10cSrcweir         // get input stream of substream
361*cdf0e10cSrcweir         XInputStream xInput = xStream.getInputStream();
362*cdf0e10cSrcweir         if ( xInput == null )
363*cdf0e10cSrcweir         {
364*cdf0e10cSrcweir             Error( "Can't get XInputStream implementation from substream '" + sName + "'!" );
365*cdf0e10cSrcweir             return false;
366*cdf0e10cSrcweir         }
367*cdf0e10cSrcweir 
368*cdf0e10cSrcweir         byte pContents[][] = new byte[1][]; // ???
369*cdf0e10cSrcweir 
370*cdf0e10cSrcweir         // read contents
371*cdf0e10cSrcweir         try
372*cdf0e10cSrcweir         {
373*cdf0e10cSrcweir             xInput.readBytes( pContents, pBytes.length + 1 );
374*cdf0e10cSrcweir         }
375*cdf0e10cSrcweir         catch( Exception e )
376*cdf0e10cSrcweir         {
377*cdf0e10cSrcweir             Error( "Can't read from stream '" + sName + "', exception: " + e );
378*cdf0e10cSrcweir             return false;
379*cdf0e10cSrcweir         }
380*cdf0e10cSrcweir 
381*cdf0e10cSrcweir         // check size of stream data
382*cdf0e10cSrcweir         if ( pContents.length == 0 )
383*cdf0e10cSrcweir         {
384*cdf0e10cSrcweir             Error( "SubStream '" + sName + "' reading produced disaster!"  );
385*cdf0e10cSrcweir             return false;
386*cdf0e10cSrcweir         }
387*cdf0e10cSrcweir 
388*cdf0e10cSrcweir         if ( pBytes.length != pContents[0].length )
389*cdf0e10cSrcweir         {
390*cdf0e10cSrcweir             Error( "SubStream '" + sName + "' contains wrong amount of data! (" + pContents[0].length + "/" + pBytes.length + ")" );
391*cdf0e10cSrcweir             return false;
392*cdf0e10cSrcweir         }
393*cdf0e10cSrcweir 
394*cdf0e10cSrcweir         // check stream data
395*cdf0e10cSrcweir         for ( int ind = 0; ind < pBytes.length; ind++ )
396*cdf0e10cSrcweir         {
397*cdf0e10cSrcweir             if ( pBytes[ind] != pContents[0][ind] )
398*cdf0e10cSrcweir             {
399*cdf0e10cSrcweir                 Error( "SubStream '" + sName + "' contains wrong data!" );
400*cdf0e10cSrcweir                 return false;
401*cdf0e10cSrcweir             }
402*cdf0e10cSrcweir         }
403*cdf0e10cSrcweir 
404*cdf0e10cSrcweir 
405*cdf0e10cSrcweir         // check properties
406*cdf0e10cSrcweir         boolean bOk = false;
407*cdf0e10cSrcweir 
408*cdf0e10cSrcweir         // get access to the XPropertySet interface
409*cdf0e10cSrcweir         XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface( XPropertySet.class, xStream );
410*cdf0e10cSrcweir         if ( xPropSet != null )
411*cdf0e10cSrcweir         {
412*cdf0e10cSrcweir             try
413*cdf0e10cSrcweir             {
414*cdf0e10cSrcweir                 // get "MediaType" and "Size" properties and control there values
415*cdf0e10cSrcweir                 String sPropMediaType = AnyConverter.toString( xPropSet.getPropertyValue( "MediaType" ) );
416*cdf0e10cSrcweir                 int nPropSize = AnyConverter.toInt( xPropSet.getPropertyValue( "Size" ) );
417*cdf0e10cSrcweir 
418*cdf0e10cSrcweir                 bOk = true;
419*cdf0e10cSrcweir                 if ( !sPropMediaType.equals( sMediaType ) )
420*cdf0e10cSrcweir                 {
421*cdf0e10cSrcweir                     Error( "'MediaType' property contains wrong value for stream '" + sName + "',\nexpected: '"
422*cdf0e10cSrcweir                             + sMediaType + "', set: '" + sPropMediaType + "'!" );
423*cdf0e10cSrcweir                     bOk = false;
424*cdf0e10cSrcweir                 }
425*cdf0e10cSrcweir 
426*cdf0e10cSrcweir                 if ( nPropSize != pBytes.length )
427*cdf0e10cSrcweir                 {
428*cdf0e10cSrcweir                     Error( "'Size' property contains wrong value for stream'" + sName + "'!" );
429*cdf0e10cSrcweir                     bOk = false;
430*cdf0e10cSrcweir                 }
431*cdf0e10cSrcweir             }
432*cdf0e10cSrcweir             catch( Exception e )
433*cdf0e10cSrcweir             {
434*cdf0e10cSrcweir                 Error( "Can't get properties of substream '" + sName + "', exception: " + e );
435*cdf0e10cSrcweir             }
436*cdf0e10cSrcweir         }
437*cdf0e10cSrcweir         else
438*cdf0e10cSrcweir         {
439*cdf0e10cSrcweir             Error( "Can't get XPropertySet implementation from stream '" + sName + "'!" );
440*cdf0e10cSrcweir         }
441*cdf0e10cSrcweir 
442*cdf0e10cSrcweir         return bOk;
443*cdf0e10cSrcweir     }
444*cdf0e10cSrcweir 
445*cdf0e10cSrcweir     public boolean checkStream( XStorage xParentStorage,
446*cdf0e10cSrcweir                                 String sName,
447*cdf0e10cSrcweir                                 String sMediaType,
448*cdf0e10cSrcweir                                 byte[] pBytes )
449*cdf0e10cSrcweir     {
450*cdf0e10cSrcweir         // open substream element first
451*cdf0e10cSrcweir         XStream xSubStream = null;
452*cdf0e10cSrcweir         try
453*cdf0e10cSrcweir         {
454*cdf0e10cSrcweir             Object oSubStream = xParentStorage.openStreamElement( sName, ElementModes.ELEMENT_READ );
455*cdf0e10cSrcweir             xSubStream = (XStream) UnoRuntime.queryInterface( XStream.class, oSubStream );
456*cdf0e10cSrcweir             if ( xSubStream == null )
457*cdf0e10cSrcweir             {
458*cdf0e10cSrcweir                 Error( "Can't open substream '" + sName + "'!" );
459*cdf0e10cSrcweir                 return false;
460*cdf0e10cSrcweir             }
461*cdf0e10cSrcweir         }
462*cdf0e10cSrcweir         catch( Exception e )
463*cdf0e10cSrcweir         {
464*cdf0e10cSrcweir             Error( "Can't open substream '" + sName + "', exception : " + e + "!" );
465*cdf0e10cSrcweir             return false;
466*cdf0e10cSrcweir         }
467*cdf0e10cSrcweir 
468*cdf0e10cSrcweir         return InternalCheckStream( xSubStream, sName, sMediaType, pBytes );
469*cdf0e10cSrcweir     }
470*cdf0e10cSrcweir 
471*cdf0e10cSrcweir     public boolean checkEncrStream( XStorage xParentStorage,
472*cdf0e10cSrcweir                                     String sName,
473*cdf0e10cSrcweir                                     String sMediaType,
474*cdf0e10cSrcweir                                     byte[] pBytes,
475*cdf0e10cSrcweir                                     byte[] pPass )
476*cdf0e10cSrcweir     {
477*cdf0e10cSrcweir         // Important: a common password for any of parent storage should not be set or
478*cdf0e10cSrcweir         //            should be different from pPass
479*cdf0e10cSrcweir 
480*cdf0e10cSrcweir         if ( pPass.length == 0 )
481*cdf0e10cSrcweir         {
482*cdf0e10cSrcweir             Error( "Wrong password is used in the test!" );
483*cdf0e10cSrcweir             return false;
484*cdf0e10cSrcweir         }
485*cdf0e10cSrcweir 
486*cdf0e10cSrcweir         try
487*cdf0e10cSrcweir         {
488*cdf0e10cSrcweir             Object oSubStream = xParentStorage.openStreamElement( sName, ElementModes.ELEMENT_READ );
489*cdf0e10cSrcweir             Error( "Encrypted stream '" + sName + "' was opened without password!" );
490*cdf0e10cSrcweir             return false;
491*cdf0e10cSrcweir         }
492*cdf0e10cSrcweir         catch( WrongPasswordException wpe )
493*cdf0e10cSrcweir         {}
494*cdf0e10cSrcweir         catch( Exception e )
495*cdf0e10cSrcweir         {
496*cdf0e10cSrcweir             Error( "Unexpected exception in case of opening of encrypted stream '" + sName + "' without password: " + e + "!" );
497*cdf0e10cSrcweir             return false;
498*cdf0e10cSrcweir         }
499*cdf0e10cSrcweir 
500*cdf0e10cSrcweir         byte pWrongPass[] = { 1, 1 };
501*cdf0e10cSrcweir         pWrongPass[0] += pPass[0];
502*cdf0e10cSrcweir         try
503*cdf0e10cSrcweir         {
504*cdf0e10cSrcweir             Object oSubStream = xParentStorage.openEncryptedStreamElement( sName, ElementModes.ELEMENT_READ, pWrongPass );
505*cdf0e10cSrcweir             Error( "Encrypted stream '" + sName + "' was opened with wrong password!" );
506*cdf0e10cSrcweir             return false;
507*cdf0e10cSrcweir         }
508*cdf0e10cSrcweir         catch( WrongPasswordException wpe )
509*cdf0e10cSrcweir         {}
510*cdf0e10cSrcweir         catch( Exception e )
511*cdf0e10cSrcweir         {
512*cdf0e10cSrcweir             Error( "Unexpected exception in case of opening of encrypted stream '" + sName + "' with wrong password: " + e + "!" );
513*cdf0e10cSrcweir             return false;
514*cdf0e10cSrcweir         }
515*cdf0e10cSrcweir 
516*cdf0e10cSrcweir         XStream xSubStream = null;
517*cdf0e10cSrcweir         try
518*cdf0e10cSrcweir         {
519*cdf0e10cSrcweir             Object oSubStream = xParentStorage.openEncryptedStreamElement( sName, ElementModes.ELEMENT_READ, pPass );
520*cdf0e10cSrcweir             xSubStream = (XStream) UnoRuntime.queryInterface( XStream.class, oSubStream );
521*cdf0e10cSrcweir             if ( xSubStream == null )
522*cdf0e10cSrcweir             {
523*cdf0e10cSrcweir                 Error( "Can't open encrypted substream '" + sName + "'!" );
524*cdf0e10cSrcweir                 return false;
525*cdf0e10cSrcweir             }
526*cdf0e10cSrcweir         }
527*cdf0e10cSrcweir         catch( Exception e )
528*cdf0e10cSrcweir         {
529*cdf0e10cSrcweir             Error( "Can't open encrypted substream '" + sName + "', exception : " + e + "!" );
530*cdf0e10cSrcweir             return false;
531*cdf0e10cSrcweir         }
532*cdf0e10cSrcweir 
533*cdf0e10cSrcweir         return InternalCheckStream( xSubStream, sName, sMediaType, pBytes );
534*cdf0e10cSrcweir     }
535*cdf0e10cSrcweir 
536*cdf0e10cSrcweir     public boolean copyStorage( XStorage xSourceStorage, XStorage xDestStorage )
537*cdf0e10cSrcweir     {
538*cdf0e10cSrcweir         // copy xSourceStorage to xDestStorage
539*cdf0e10cSrcweir         try
540*cdf0e10cSrcweir         {
541*cdf0e10cSrcweir             xSourceStorage.copyToStorage( xDestStorage );
542*cdf0e10cSrcweir         }
543*cdf0e10cSrcweir         catch( Exception e )
544*cdf0e10cSrcweir         {
545*cdf0e10cSrcweir             Error( "Storage copying failed, exception: " + e );
546*cdf0e10cSrcweir             return false;
547*cdf0e10cSrcweir         }
548*cdf0e10cSrcweir 
549*cdf0e10cSrcweir         return true;
550*cdf0e10cSrcweir     }
551*cdf0e10cSrcweir 
552*cdf0e10cSrcweir     public boolean commitStorage( XStorage xStorage )
553*cdf0e10cSrcweir     {
554*cdf0e10cSrcweir         // XTransactedObject must be supported by storages
555*cdf0e10cSrcweir         XTransactedObject xTransact = (XTransactedObject) UnoRuntime.queryInterface( XTransactedObject.class, xStorage );
556*cdf0e10cSrcweir         if ( xTransact == null )
557*cdf0e10cSrcweir         {
558*cdf0e10cSrcweir             Error( "Storage doesn't implement transacted access!" );
559*cdf0e10cSrcweir             return false;
560*cdf0e10cSrcweir         }
561*cdf0e10cSrcweir 
562*cdf0e10cSrcweir         try
563*cdf0e10cSrcweir         {
564*cdf0e10cSrcweir             xTransact.commit();
565*cdf0e10cSrcweir         }
566*cdf0e10cSrcweir         catch( Exception e )
567*cdf0e10cSrcweir         {
568*cdf0e10cSrcweir             Error( "Storage commit failed, exception:" + e );
569*cdf0e10cSrcweir             return false;
570*cdf0e10cSrcweir         }
571*cdf0e10cSrcweir 
572*cdf0e10cSrcweir         return true;
573*cdf0e10cSrcweir     }
574*cdf0e10cSrcweir 
575*cdf0e10cSrcweir     public boolean disposeStorage( XStorage xStorage )
576*cdf0e10cSrcweir     {
577*cdf0e10cSrcweir         // dispose the storage
578*cdf0e10cSrcweir         XComponent xComponent = (XComponent) UnoRuntime.queryInterface( XComponent.class, xStorage );
579*cdf0e10cSrcweir         if ( xComponent == null )
580*cdf0e10cSrcweir         {
581*cdf0e10cSrcweir             Error( "Can't retrieve XComponent implementation from storage!" );
582*cdf0e10cSrcweir             return false;
583*cdf0e10cSrcweir         }
584*cdf0e10cSrcweir 
585*cdf0e10cSrcweir         try
586*cdf0e10cSrcweir         {
587*cdf0e10cSrcweir             xComponent.dispose();
588*cdf0e10cSrcweir         }
589*cdf0e10cSrcweir         catch( Exception e )
590*cdf0e10cSrcweir         {
591*cdf0e10cSrcweir             Error( "Storage disposing failed!" );
592*cdf0e10cSrcweir             return false;
593*cdf0e10cSrcweir         }
594*cdf0e10cSrcweir 
595*cdf0e10cSrcweir         return true;
596*cdf0e10cSrcweir     }
597*cdf0e10cSrcweir 
598*cdf0e10cSrcweir     public XInputStream getInputStream( XStream xStream )
599*cdf0e10cSrcweir     {
600*cdf0e10cSrcweir         XInputStream xInTemp = null;
601*cdf0e10cSrcweir         try
602*cdf0e10cSrcweir         {
603*cdf0e10cSrcweir             xInTemp = xStream.getInputStream();
604*cdf0e10cSrcweir             if ( xInTemp == null )
605*cdf0e10cSrcweir                 Error( "Can't get the input part of a stream!" );
606*cdf0e10cSrcweir         }
607*cdf0e10cSrcweir         catch ( Exception e )
608*cdf0e10cSrcweir         {
609*cdf0e10cSrcweir             Error( "Can't get the input part of a stream, exception :" + e );
610*cdf0e10cSrcweir         }
611*cdf0e10cSrcweir 
612*cdf0e10cSrcweir         return xInTemp;
613*cdf0e10cSrcweir     }
614*cdf0e10cSrcweir 
615*cdf0e10cSrcweir     public boolean closeOutput( XStream xStream )
616*cdf0e10cSrcweir     {
617*cdf0e10cSrcweir         XOutputStream xOutTemp = null;
618*cdf0e10cSrcweir         try
619*cdf0e10cSrcweir         {
620*cdf0e10cSrcweir             xOutTemp = xStream.getOutputStream();
621*cdf0e10cSrcweir             if ( xOutTemp == null )
622*cdf0e10cSrcweir             {
623*cdf0e10cSrcweir                 Error( "Can't get the output part of a stream!" );
624*cdf0e10cSrcweir                 return false;
625*cdf0e10cSrcweir             }
626*cdf0e10cSrcweir         }
627*cdf0e10cSrcweir         catch ( Exception e )
628*cdf0e10cSrcweir         {
629*cdf0e10cSrcweir             Error( "Can't get the output part of a stream, exception :" + e );
630*cdf0e10cSrcweir             return false;
631*cdf0e10cSrcweir         }
632*cdf0e10cSrcweir 
633*cdf0e10cSrcweir         try
634*cdf0e10cSrcweir         {
635*cdf0e10cSrcweir             xOutTemp.closeOutput();
636*cdf0e10cSrcweir         }
637*cdf0e10cSrcweir         catch ( Exception e )
638*cdf0e10cSrcweir         {
639*cdf0e10cSrcweir             Error( "Can't close output part of a stream, exception :" + e );
640*cdf0e10cSrcweir             return false;
641*cdf0e10cSrcweir         }
642*cdf0e10cSrcweir 
643*cdf0e10cSrcweir         return true;
644*cdf0e10cSrcweir     }
645*cdf0e10cSrcweir 
646*cdf0e10cSrcweir     public XStorage openSubStorage( XStorage xStorage, String sName, int nMode )
647*cdf0e10cSrcweir     {
648*cdf0e10cSrcweir         // open existing substorage
649*cdf0e10cSrcweir         try
650*cdf0e10cSrcweir         {
651*cdf0e10cSrcweir             Object oSubStorage = xStorage.openStorageElement( sName, nMode );
652*cdf0e10cSrcweir             XStorage xSubStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oSubStorage );
653*cdf0e10cSrcweir             return xSubStorage;
654*cdf0e10cSrcweir         }
655*cdf0e10cSrcweir         catch( Exception e )
656*cdf0e10cSrcweir         {
657*cdf0e10cSrcweir             Error( "Can't open substorage '" + sName + "', exception: " + e );
658*cdf0e10cSrcweir         }
659*cdf0e10cSrcweir 
660*cdf0e10cSrcweir         return null;
661*cdf0e10cSrcweir     }
662*cdf0e10cSrcweir 
663*cdf0e10cSrcweir     public XStream CreateTempFileStream( XMultiServiceFactory xMSF )
664*cdf0e10cSrcweir     {
665*cdf0e10cSrcweir         // try to get temporary file representation
666*cdf0e10cSrcweir         XStream xTempFileStream = null;
667*cdf0e10cSrcweir         try
668*cdf0e10cSrcweir         {
669*cdf0e10cSrcweir             Object oTempFile = xMSF.createInstance( "com.sun.star.io.TempFile" );
670*cdf0e10cSrcweir             xTempFileStream = (XStream)UnoRuntime.queryInterface( XStream.class, oTempFile );
671*cdf0e10cSrcweir         }
672*cdf0e10cSrcweir         catch( Exception e )
673*cdf0e10cSrcweir         {}
674*cdf0e10cSrcweir 
675*cdf0e10cSrcweir         if ( xTempFileStream == null )
676*cdf0e10cSrcweir             Error( "Can't create temporary file!" );
677*cdf0e10cSrcweir 
678*cdf0e10cSrcweir         return xTempFileStream;
679*cdf0e10cSrcweir     }
680*cdf0e10cSrcweir 
681*cdf0e10cSrcweir     public String CreateTempFile( XMultiServiceFactory xMSF )
682*cdf0e10cSrcweir     {
683*cdf0e10cSrcweir         String sResult = null;
684*cdf0e10cSrcweir 
685*cdf0e10cSrcweir         // try to get temporary file representation
686*cdf0e10cSrcweir         XPropertySet xTempFileProps = null;
687*cdf0e10cSrcweir         try
688*cdf0e10cSrcweir         {
689*cdf0e10cSrcweir             Object oTempFile = xMSF.createInstance( "com.sun.star.io.TempFile" );
690*cdf0e10cSrcweir             xTempFileProps = (XPropertySet)UnoRuntime.queryInterface( XPropertySet.class, oTempFile );
691*cdf0e10cSrcweir         }
692*cdf0e10cSrcweir         catch( Exception e )
693*cdf0e10cSrcweir         {}
694*cdf0e10cSrcweir 
695*cdf0e10cSrcweir         if ( xTempFileProps != null )
696*cdf0e10cSrcweir         {
697*cdf0e10cSrcweir             try
698*cdf0e10cSrcweir             {
699*cdf0e10cSrcweir                 xTempFileProps.setPropertyValue( "RemoveFile", new Boolean( false ) );
700*cdf0e10cSrcweir                 sResult = AnyConverter.toString( xTempFileProps.getPropertyValue( "Uri" ) );
701*cdf0e10cSrcweir             }
702*cdf0e10cSrcweir             catch( Exception e )
703*cdf0e10cSrcweir             {
704*cdf0e10cSrcweir                 Error( "Can't control TempFile properties, exception: " + e );
705*cdf0e10cSrcweir             }
706*cdf0e10cSrcweir         }
707*cdf0e10cSrcweir         else
708*cdf0e10cSrcweir         {
709*cdf0e10cSrcweir             Error( "Can't create temporary file representation!" );
710*cdf0e10cSrcweir         }
711*cdf0e10cSrcweir 
712*cdf0e10cSrcweir         // close temporary file explicitly
713*cdf0e10cSrcweir         try
714*cdf0e10cSrcweir         {
715*cdf0e10cSrcweir             XStream xStream = (XStream)UnoRuntime.queryInterface( XStream.class, xTempFileProps );
716*cdf0e10cSrcweir             if ( xStream != null )
717*cdf0e10cSrcweir             {
718*cdf0e10cSrcweir                 XOutputStream xOut = xStream.getOutputStream();
719*cdf0e10cSrcweir                 if ( xOut != null )
720*cdf0e10cSrcweir                     xOut.closeOutput();
721*cdf0e10cSrcweir 
722*cdf0e10cSrcweir                 XInputStream xIn = xStream.getInputStream();
723*cdf0e10cSrcweir                 if ( xIn != null )
724*cdf0e10cSrcweir                     xIn.closeInput();
725*cdf0e10cSrcweir             }
726*cdf0e10cSrcweir             else
727*cdf0e10cSrcweir                 Error( "Can't close TempFile!" );
728*cdf0e10cSrcweir         }
729*cdf0e10cSrcweir         catch( Exception e )
730*cdf0e10cSrcweir         {
731*cdf0e10cSrcweir             Error( "Can't close TempFile, exception: " + e );
732*cdf0e10cSrcweir         }
733*cdf0e10cSrcweir 
734*cdf0e10cSrcweir         return sResult;
735*cdf0e10cSrcweir     }
736*cdf0e10cSrcweir 
737*cdf0e10cSrcweir     public boolean copyElementTo( XStorage xSource, String sName, XStorage xDest )
738*cdf0e10cSrcweir     {
739*cdf0e10cSrcweir         // copy element with name sName from xSource to xDest
740*cdf0e10cSrcweir         try
741*cdf0e10cSrcweir         {
742*cdf0e10cSrcweir             xSource.copyElementTo( sName, xDest, sName );
743*cdf0e10cSrcweir         }
744*cdf0e10cSrcweir         catch( Exception e )
745*cdf0e10cSrcweir         {
746*cdf0e10cSrcweir             Error( "Element copying failed, exception: " + e );
747*cdf0e10cSrcweir             return false;
748*cdf0e10cSrcweir         }
749*cdf0e10cSrcweir 
750*cdf0e10cSrcweir         return true;
751*cdf0e10cSrcweir     }
752*cdf0e10cSrcweir 
753*cdf0e10cSrcweir     public boolean moveElementTo( XStorage xSource, String sName, XStorage xDest )
754*cdf0e10cSrcweir     {
755*cdf0e10cSrcweir         // move element with name sName from xSource to xDest
756*cdf0e10cSrcweir         try
757*cdf0e10cSrcweir         {
758*cdf0e10cSrcweir             xSource.moveElementTo( sName, xDest, sName );
759*cdf0e10cSrcweir         }
760*cdf0e10cSrcweir         catch( Exception e )
761*cdf0e10cSrcweir         {
762*cdf0e10cSrcweir             Error( "Element moving failed, exception: " + e );
763*cdf0e10cSrcweir             return false;
764*cdf0e10cSrcweir         }
765*cdf0e10cSrcweir 
766*cdf0e10cSrcweir         return true;
767*cdf0e10cSrcweir     }
768*cdf0e10cSrcweir 
769*cdf0e10cSrcweir     public boolean renameElement( XStorage xStorage, String sOldName, String sNewName )
770*cdf0e10cSrcweir     {
771*cdf0e10cSrcweir         // rename element with name sOldName to sNewName
772*cdf0e10cSrcweir         try
773*cdf0e10cSrcweir         {
774*cdf0e10cSrcweir             xStorage.renameElement( sOldName, sNewName );
775*cdf0e10cSrcweir         }
776*cdf0e10cSrcweir         catch( Exception e )
777*cdf0e10cSrcweir         {
778*cdf0e10cSrcweir             Error( "Element renaming failed, exception: " + e );
779*cdf0e10cSrcweir             return false;
780*cdf0e10cSrcweir         }
781*cdf0e10cSrcweir 
782*cdf0e10cSrcweir         return true;
783*cdf0e10cSrcweir     }
784*cdf0e10cSrcweir 
785*cdf0e10cSrcweir     public boolean removeElement( XStorage xStorage, String sName )
786*cdf0e10cSrcweir     {
787*cdf0e10cSrcweir         // remove element with name sName
788*cdf0e10cSrcweir         try
789*cdf0e10cSrcweir         {
790*cdf0e10cSrcweir             xStorage.removeElement( sName );
791*cdf0e10cSrcweir         }
792*cdf0e10cSrcweir         catch( Exception e )
793*cdf0e10cSrcweir         {
794*cdf0e10cSrcweir             Error( "Element removing failed, exception: " + e );
795*cdf0e10cSrcweir             return false;
796*cdf0e10cSrcweir         }
797*cdf0e10cSrcweir 
798*cdf0e10cSrcweir         return true;
799*cdf0e10cSrcweir     }
800*cdf0e10cSrcweir 
801*cdf0e10cSrcweir     public XStream OpenStream( XStorage xStorage,
802*cdf0e10cSrcweir                                 String sStreamName,
803*cdf0e10cSrcweir                                 int nMode )
804*cdf0e10cSrcweir     {
805*cdf0e10cSrcweir         // open substream element
806*cdf0e10cSrcweir         XStream xSubStream = null;
807*cdf0e10cSrcweir         try
808*cdf0e10cSrcweir         {
809*cdf0e10cSrcweir             Object oSubStream = xStorage.openStreamElement( sStreamName, nMode );
810*cdf0e10cSrcweir             xSubStream = (XStream) UnoRuntime.queryInterface( XStream.class, oSubStream );
811*cdf0e10cSrcweir             if ( xSubStream == null )
812*cdf0e10cSrcweir                 Error( "Can't create substream '" + sStreamName + "'!" );
813*cdf0e10cSrcweir         }
814*cdf0e10cSrcweir         catch( Exception e )
815*cdf0e10cSrcweir         {
816*cdf0e10cSrcweir             Error( "Can't create substream '" + sStreamName + "', exception : " + e + "!" );
817*cdf0e10cSrcweir         }
818*cdf0e10cSrcweir 
819*cdf0e10cSrcweir         return xSubStream;
820*cdf0e10cSrcweir     }
821*cdf0e10cSrcweir 
822*cdf0e10cSrcweir     public boolean cantOpenStorage( XStorage xStorage, String sName )
823*cdf0e10cSrcweir     {
824*cdf0e10cSrcweir         // try to open an opened substorage, open call must fail
825*cdf0e10cSrcweir         try
826*cdf0e10cSrcweir         {
827*cdf0e10cSrcweir             Object oDummyStorage = xStorage.openStorageElement( sName, ElementModes.ELEMENT_READ );
828*cdf0e10cSrcweir             Error( "The trying to reopen opened substorage '" + sName + "' must fail!" );
829*cdf0e10cSrcweir         }
830*cdf0e10cSrcweir         catch( Exception e )
831*cdf0e10cSrcweir         {
832*cdf0e10cSrcweir             return true;
833*cdf0e10cSrcweir         }
834*cdf0e10cSrcweir 
835*cdf0e10cSrcweir         return false;
836*cdf0e10cSrcweir     }
837*cdf0e10cSrcweir 
838*cdf0e10cSrcweir     public boolean cantOpenStream( XStorage xStorage, String sName, int nMode )
839*cdf0e10cSrcweir     {
840*cdf0e10cSrcweir         // try to open the substream with specified mode must fail
841*cdf0e10cSrcweir         try
842*cdf0e10cSrcweir         {
843*cdf0e10cSrcweir             Object oDummyStream = xStorage.openStreamElement( sName, nMode );
844*cdf0e10cSrcweir             Error( "The trying to open substoream '" + sName + "' must fail!" );
845*cdf0e10cSrcweir         }
846*cdf0e10cSrcweir         catch( Exception e )
847*cdf0e10cSrcweir         {
848*cdf0e10cSrcweir             return true;
849*cdf0e10cSrcweir         }
850*cdf0e10cSrcweir 
851*cdf0e10cSrcweir         return false;
852*cdf0e10cSrcweir     }
853*cdf0e10cSrcweir 
854*cdf0e10cSrcweir     public void Error( String sError )
855*cdf0e10cSrcweir     {
856*cdf0e10cSrcweir         System.out.println( m_sTestPrefix + "Error: " + sError );
857*cdf0e10cSrcweir     }
858*cdf0e10cSrcweir 
859*cdf0e10cSrcweir     public void Message( String sError )
860*cdf0e10cSrcweir     {
861*cdf0e10cSrcweir         System.out.println( m_sTestPrefix + sError );
862*cdf0e10cSrcweir     }
863*cdf0e10cSrcweir }
864*cdf0e10cSrcweir 
865