xref: /trunk/main/package/qa/storages/Test14.java (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
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 Test14 implements StorageTest {
18 
19     XMultiServiceFactory m_xMSF;
20     XSingleServiceFactory m_xStorageFactory;
21     TestHelper m_aTestHelper;
22 
23     public Test14( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory, LogWriter aLogWriter )
24     {
25         m_xMSF = xMSF;
26         m_xStorageFactory = xStorageFactory;
27         m_aTestHelper = new TestHelper( aLogWriter, "Test14: " );
28     }
29 
30     public boolean test()
31     {
32         String aStreamPrefix = "";
33         for ( int nInd = 0; nInd < 4; ++nInd, aStreamPrefix += "SubStorage" + nInd )
34             if ( !testForPath( aStreamPrefix ) )
35                 return false;
36 
37         return true;
38     }
39 
40     public boolean testForPath( String aStreamPrefix )
41     {
42         try
43         {
44             String aSubStream1Path = aStreamPrefix + "SubStream1";
45             String aSubStream2Path = aStreamPrefix + "SubStream2";
46             String aSubStream3Path = aStreamPrefix + "SubStream3";
47 
48             String sTempFileURL = m_aTestHelper.CreateTempFile( m_xMSF );
49             if ( sTempFileURL == null || sTempFileURL == "" )
50             {
51                 m_aTestHelper.Error( "No valid temporary file was created!" );
52                 return false;
53             }
54 
55             // create temporary storage based on a previously created temporary file
56             Object pArgs[] = new Object[2];
57             pArgs[0] = (Object) sTempFileURL;
58             pArgs[1] = new Integer( ElementModes.WRITE );
59 
60             Object oTempFileStorage = m_xStorageFactory.createInstanceWithArguments( pArgs );
61             XStorage xTempFileStorage = (XStorage)UnoRuntime.queryInterface( XStorage.class, oTempFileStorage );
62             if ( xTempFileStorage == null )
63             {
64                 m_aTestHelper.Error( "Can't create storage based on temporary file!" );
65                 return false;
66             }
67 
68             byte pBytes1[] = { 1, 1, 1, 1, 1 };
69             String sPass1 = "12345";
70 
71             // open a new substream hierarchically, set "MediaType" and "Compressed" properties to it, write some bytes
72             // and commit
73             if ( !m_aTestHelper.WriteBytesToEncrStreamH( xTempFileStorage, aSubStream1Path, "MediaType1", true, pBytes1, sPass1, true ) )
74                 return false;
75 
76             byte pBytes2[] = { 2, 2, 2, 2, 2 };
77             String sPass2 = "54321";
78 
79             // open a new substream hierarchically, set "MediaType" and "Compressed" properties to it, write some bytes
80             // and commit
81             if ( !m_aTestHelper.WriteBytesToEncrStreamH( xTempFileStorage, aSubStream2Path, "MediaType2", false, pBytes2, sPass2, true ) )
82                 return false;
83 
84             // open a new substream hierarchically, set "MediaType" and "Compressed" properties to it, write some bytes
85             // and don't commit
86             if ( !m_aTestHelper.WriteBytesToEncrStreamH( xTempFileStorage, aSubStream3Path, "MediaType2", false, pBytes2, sPass2, false ) )
87                 return false;
88 
89             // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly
90             if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempFileStorage,
91                                                             "MediaType3",
92                                                             true,
93                                                             ElementModes.WRITE ) )
94                 return false;
95 
96             // commit the root storage so the contents must be stored now
97             if ( !m_aTestHelper.commitStorage( xTempFileStorage ) )
98                 return false;
99 
100             // dispose used storages to free resources
101             if ( !m_aTestHelper.disposeStorage( xTempFileStorage ) )
102                 return false;
103 
104             // ================================================
105             // now reopen the storage,
106             // check all the written and copied information
107             // and change it
108             // ================================================
109 
110             // the temporary file must not be locked any more after storage disposing
111             oTempFileStorage = m_xStorageFactory.createInstanceWithArguments( pArgs );
112             xTempFileStorage = (XStorage)UnoRuntime.queryInterface( XStorage.class, oTempFileStorage );
113             if ( xTempFileStorage == null )
114             {
115                 m_aTestHelper.Error( "Can't create storage based on temporary file!" );
116                 return false;
117             }
118 
119             if ( !m_aTestHelper.checkStorageProperties( xTempFileStorage, "MediaType3", true, ElementModes.WRITE ) )
120                 return false;
121 
122             if ( !m_aTestHelper.checkEncrStreamH( xTempFileStorage, aSubStream1Path, "MediaType1", pBytes1, sPass1 ) )
123                 return false;
124 
125             if ( !m_aTestHelper.checkEncrStreamH( xTempFileStorage, aSubStream2Path, "MediaType2", pBytes2, sPass2 ) )
126                 return false;
127 
128             if ( !m_aTestHelper.cantOpenEncrStreamH( xTempFileStorage, aSubStream3Path, ElementModes.READ, sPass2 ) )
129                 return false;
130 
131             // open existing substream hierarchically, set "MediaType" and "Compressed" properties to it, write some bytes
132             // and commit
133             if ( !m_aTestHelper.WriteBytesToEncrStreamH( xTempFileStorage, aSubStream1Path, "MediaType3", true, pBytes2, sPass1, true ) )
134                 return false;
135 
136             // open existing substream hierarchically, set "MediaType" and "Compressed" properties to it, write some bytes
137             // and don't commit
138             if ( !m_aTestHelper.WriteBytesToEncrStreamH( xTempFileStorage, aSubStream2Path, "MediaType3", true, pBytes1, sPass2, false ) )
139                 return false;
140 
141             // commit the root storage so the contents must be stored now
142             if ( !m_aTestHelper.commitStorage( xTempFileStorage ) )
143                 return false;
144 
145             // dispose used storages to free resources
146             if ( !m_aTestHelper.disposeStorage( xTempFileStorage ) )
147                 return false;
148 
149             // ================================================
150             // now reopen the storage,
151             // check all the written information
152             // ================================================
153 
154             // the temporary file must not be locked any more after storage disposing
155             pArgs[1] = new Integer( ElementModes.READ );
156             Object oResultStorage = m_xStorageFactory.createInstanceWithArguments( pArgs );
157             XStorage xResultStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oResultStorage );
158             if ( xResultStorage == null )
159             {
160                 m_aTestHelper.Error( "Can't reopen storage based on temporary file!" );
161                 return false;
162             }
163 
164             if ( !m_aTestHelper.checkStorageProperties( xResultStorage, "MediaType3", true, ElementModes.READ ) )
165                 return false;
166 
167             if ( !m_aTestHelper.checkEncrStreamH( xResultStorage, aSubStream1Path, "MediaType3", pBytes2, sPass1 ) )
168                 return false;
169 
170             // the following stream was not commited last time, so the last change must be lost
171             if ( !m_aTestHelper.checkEncrStreamH( xResultStorage, aSubStream2Path, "MediaType2", pBytes2, sPass2 ) )
172                 return false;
173 
174             // dispose used storages to free resources
175             if ( !m_aTestHelper.disposeStorage( xResultStorage ) )
176                 return false;
177 
178             return true;
179         }
180         catch( Exception e )
181         {
182             m_aTestHelper.Error( "Exception: " + e );
183             return false;
184         }
185     }
186 
187 }
188 
189