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