xref: /trunk/main/package/qa/storages/Test18.java (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
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 
11 import com.sun.star.embed.*;
12 
13 import share.LogWriter;
14 import complex.storages.TestHelper;
15 import complex.storages.StorageTest;
16 
17 public class Test18 implements StorageTest {
18 
19     XMultiServiceFactory m_xMSF;
20     XSingleServiceFactory m_xStorageFactory;
21     TestHelper m_aTestHelper;
22 
23     public Test18( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory, LogWriter aLogWriter )
24     {
25         m_xMSF = xMSF;
26         m_xStorageFactory = xStorageFactory;
27         m_aTestHelper = new TestHelper( aLogWriter, "Test18: " );
28     }
29 
30     public boolean test()
31     {
32         try
33         {
34             // test the default value of Compressed property
35             String sTempFileURL = m_aTestHelper.CreateTempFile( m_xMSF );
36             if ( sTempFileURL == null || sTempFileURL == "" )
37             {
38                 m_aTestHelper.Error( "No valid temporary file was created!" );
39                 return false;
40             }
41 
42             // create temporary storage based on arbitrary medium
43             // after such a storage is closed it is lost
44             Object oTempStorage = m_xStorageFactory.createInstance();
45             XStorage xTempStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTempStorage );
46             if ( xTempStorage == null )
47             {
48                 m_aTestHelper.Error( "Can't create temporary storage representation!" );
49                 return false;
50             }
51 
52             // open a new substorage
53             XStorage xTempSubStorage = m_aTestHelper.openSubStorage( xTempStorage,
54                                                                         "SubStorage1",
55                                                                         ElementModes.WRITE );
56             if ( xTempSubStorage == null )
57             {
58                 m_aTestHelper.Error( "Can't create substorage!" );
59                 return false;
60             }
61 
62             byte pBytes1[] = { 1, 1, 1, 1, 1 };
63 
64             // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
65             if ( !m_aTestHelper.WriteBytesToSubstreamDefaultCompressed( xTempSubStorage, "SubStream1", "image/jpeg", pBytes1 ) )
66                 return false;
67 
68             // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
69             if ( !m_aTestHelper.WriteBytesToSubstreamDefaultCompressed( xTempSubStorage, "SubStream2", "image/png", pBytes1 ) )
70                 return false;
71 
72             // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
73             if ( !m_aTestHelper.WriteBytesToSubstreamDefaultCompressed( xTempSubStorage, "SubStream3", "image/gif", pBytes1 ) )
74                 return false;
75 
76             // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
77             if ( !m_aTestHelper.WriteBytesToSubstreamDefaultCompressed( xTempSubStorage, "SubStream4", "MediaType1", pBytes1 ) )
78                 return false;
79 
80             // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly
81             if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempStorage,
82                                                             "MediaType3",
83                                                             true,
84                                                             ElementModes.WRITE ) )
85                 return false;
86 
87             // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly
88             if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempSubStorage,
89                                                             "MediaType4",
90                                                             false,
91                                                             ElementModes.WRITE ) )
92                 return false;
93 
94             // create temporary storage based on a previously created temporary file
95             Object pArgs[] = new Object[2];
96             pArgs[0] = (Object) sTempFileURL;
97             pArgs[1] = new Integer( ElementModes.WRITE );
98 
99             Object oTempFileStorage = m_xStorageFactory.createInstanceWithArguments( pArgs );
100             XStorage xTempFileStorage = (XStorage)UnoRuntime.queryInterface( XStorage.class, oTempFileStorage );
101             if ( xTempFileStorage == null )
102             {
103                 m_aTestHelper.Error( "Can't create storage based on temporary file!" );
104                 return false;
105             }
106 
107             // copy xTempStorage to xTempFileStorage
108             // xTempFileStorage will be automatically commited
109             if ( !m_aTestHelper.copyStorage( xTempStorage, xTempFileStorage ) )
110                 return false;
111 
112             // dispose used storages to free resources
113             if ( !m_aTestHelper.disposeStorage( xTempStorage ) || !m_aTestHelper.disposeStorage( xTempFileStorage ) )
114                 return false;
115 
116             // ================================================
117             // now check all the written and copied information
118             // ================================================
119 
120             // the temporary file must not be locked any more after storage disposing
121             pArgs[1] = new Integer( ElementModes.WRITE );
122             Object oResultStorage = m_xStorageFactory.createInstanceWithArguments( pArgs );
123             XStorage xResultStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oResultStorage );
124             if ( xResultStorage == null )
125             {
126                 m_aTestHelper.Error( "Can't reopen storage based on temporary file!" );
127                 return false;
128             }
129 
130             if ( !m_aTestHelper.checkStorageProperties( xResultStorage, "MediaType3", true, ElementModes.WRITE ) )
131                 return false;
132 
133             // open existing substorage
134             XStorage xResultSubStorage = m_aTestHelper.openSubStorage( xResultStorage,
135                                                                         "SubStorage1",
136                                                                         ElementModes.READ );
137             if ( xResultSubStorage == null )
138             {
139                 m_aTestHelper.Error( "Can't open existing substorage!" );
140                 return false;
141             }
142 
143             if ( !m_aTestHelper.checkStorageProperties( xResultSubStorage, "MediaType4", false, ElementModes.READ ) )
144                 return false;
145 
146             if ( !m_aTestHelper.checkStream( xResultSubStorage, "SubStream1", "image/jpeg", false, pBytes1 ) )
147                 return false;
148 
149             if ( !m_aTestHelper.checkStream( xResultSubStorage, "SubStream2", "image/png", false, pBytes1 ) )
150                 return false;
151 
152             if ( !m_aTestHelper.checkStream( xResultSubStorage, "SubStream3", "image/gif", false, pBytes1 ) )
153                 return false;
154 
155             if ( !m_aTestHelper.checkStream( xResultSubStorage, "SubStream4", "MediaType1", true, pBytes1 ) )
156                 return false;
157 
158             // dispose used storages to free resources
159             if ( !m_aTestHelper.disposeStorage( xResultStorage ) )
160                 return false;
161 
162             return true;
163         }
164         catch( Exception e )
165         {
166             m_aTestHelper.Error( "Exception: " + e );
167             return false;
168         }
169     }
170 
171 }
172 
173