1 package complex.storages;
2 
3 import com.sun.star.uno.XInterface;
4 import com.sun.star.lang.XMultiServiceFactory;
5 import com.sun.star.lang.XSingleServiceFactory;
6 
7 import com.sun.star.bridge.XUnoUrlResolver;
8 import com.sun.star.uno.UnoRuntime;
9 import com.sun.star.uno.XInterface;
10 import com.sun.star.io.XStream;
11 
12 import com.sun.star.embed.*;
13 
14 import share.LogWriter;
15 import complex.storages.TestHelper;
16 import complex.storages.StorageTest;
17 
18 public class RegressionTest_i55821 implements StorageTest {
19 
20 	XMultiServiceFactory m_xMSF;
21 	XSingleServiceFactory m_xStorageFactory;
22 	TestHelper m_aTestHelper;
23 
24 	public RegressionTest_i55821( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory, LogWriter aLogWriter )
25 	{
26 		m_xMSF = xMSF;
27 		m_xStorageFactory = xStorageFactory;
28 		m_aTestHelper = new TestHelper( aLogWriter, "RegressionTest_i55821: " );
29 	}
30 
31     public boolean test()
32 	{
33 		try
34 		{
35 			// ================================================
36 			// create a temporary stream and a storage based on it
37 			// fill the storage with the data that will be used for testing
38 			// ================================================
39 
40 			XStream xTempFileStream = m_aTestHelper.CreateTempFileStream( m_xMSF );
41 			if ( xTempFileStream == null )
42 				return false;
43 
44 			// create storage based on the temporary stream
45 			Object pArgs[] = new Object[2];
46 			pArgs[0] = (Object) xTempFileStream;
47 			pArgs[1] = new Integer( ElementModes.WRITE );
48 
49 			Object oTempStorage = m_xStorageFactory.createInstanceWithArguments( pArgs );
50 			XStorage xTempStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTempStorage );
51 			if ( xTempStorage == null )
52 			{
53 				m_aTestHelper.Error( "Can't create temporary storage representation!" );
54 				return false;
55 			}
56 
57 			String sPass = "12345";
58 			byte pBytes[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
59 
60 			// open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
61 			// the stream will not be encrypted
62 			if ( !m_aTestHelper.WriteBytesToEncrSubstream( xTempStorage, "SubStream1", "MediaType1", false, pBytes, sPass ) )
63 				return false;
64 
65 			if ( !m_aTestHelper.commitStorage( xTempStorage ) )
66 				return false;
67 
68 			if ( !m_aTestHelper.WriteBytesToEncrSubstream( xTempStorage, "SubStream2", "MediaType2", false, pBytes, sPass ) )
69 				return false;
70 
71 			if ( !m_aTestHelper.commitStorage( xTempStorage ) )
72 				return false;
73 
74 			// dispose used storages to free resources
75 			if ( !m_aTestHelper.disposeStorage( xTempStorage ) )
76 				return false;
77 
78 			// ================================================
79 			// reopen the target storage readonly, and check contents
80 			// ================================================
81 
82 			// the temporary file must not be locked any more after storage disposing
83 			pArgs[1] = new Integer( ElementModes.READ );
84 			Object oResultStorage = m_xStorageFactory.createInstanceWithArguments( pArgs );
85 			XStorage xResultStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oResultStorage );
86 			if ( xResultStorage == null )
87 			{
88 				m_aTestHelper.Error( "Can't reopen storage based on temporary file!" );
89 				return false;
90 			}
91 
92 			if ( !m_aTestHelper.checkEncrStream( xResultStorage, "SubStream1", "MediaType1", pBytes, sPass ) )
93 				return false;
94 
95 			if ( !m_aTestHelper.checkEncrStream( xResultStorage, "SubStream2", "MediaType2", pBytes, sPass ) )
96 				return false;
97 
98 			// dispose used storages to free resources
99 			if ( !m_aTestHelper.disposeStorage( xResultStorage ) )
100 				return false;
101 
102 			return true;
103 		}
104 		catch( Exception e )
105 		{
106 			m_aTestHelper.Error( "Exception: " + e );
107 			return false;
108 		}
109     }
110 }
111 
112