xref: /trunk/main/package/qa/ofopxmlstorages/Test08.java (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 package complex.ofopxmlstorages;
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 import com.sun.star.io.XInputStream;
12 
13 import com.sun.star.embed.*;
14 import com.sun.star.beans.StringPair;
15 
16 import share.LogWriter;
17 import complex.ofopxmlstorages.TestHelper;
18 import complex.ofopxmlstorages.StorageTest;
19 
20 public class Test08 implements StorageTest {
21 
22     XMultiServiceFactory m_xMSF;
23     XSingleServiceFactory m_xStorageFactory;
24     TestHelper m_aTestHelper;
25 
26     public Test08( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory, LogWriter aLogWriter )
27     {
28         m_xMSF = xMSF;
29         m_xStorageFactory = xStorageFactory;
30         m_aTestHelper = new TestHelper( aLogWriter, "Test08: " );
31     }
32 
33     public boolean test()
34     {
35         StringPair[][] aRelations1 =
36             { { new StringPair( "Id", "Num1" ) },
37               { new StringPair( "Target", "TargetURLValue1" ), new StringPair( "Id", "Num6" ) },
38               { new StringPair( "Target", "" ), new StringPair( "Id", "Num7" ) },
39               { new StringPair( "Id", "Num2" ), new StringPair( "TargetMode", "Internal1" ), new StringPair( "Type", "unknown1" ), new StringPair( "Target", "URL value 1" ) },
40               { new StringPair( "Id", "Num3" ), new StringPair( "TargetMode", "Internal1" ), new StringPair( "Type", "unknown1" ), new StringPair( "Target", "URL value 1" ) },
41               { new StringPair( "Id", "Num4" ), new StringPair( "TargetMode", "Internal1" ), new StringPair( "Type", "unknown1" ), new StringPair( "Target", "URL value 1" ) },
42               { new StringPair( "Id", "Num5" ), new StringPair( "TargetMode", "" ), new StringPair( "Type", "unknown1" ), new StringPair( "Target", "URL value1" ) }
43             };
44 
45         try
46         {
47             XStream xTempFileStream = m_aTestHelper.CreateTempFileStream( m_xMSF );
48             if ( xTempFileStream == null )
49                 return false;
50 
51             // create storage based on the temporary stream
52             XStorage xTempStorage = m_aTestHelper.createStorageFromStream( m_xStorageFactory,
53                                                                             xTempFileStream,
54                                                                             ElementModes.WRITE );
55             if ( xTempStorage == null )
56             {
57                 m_aTestHelper.Error( "Can't create temporary storage representation!" );
58                 return false;
59             }
60 
61             // open a new substorage
62             XStorage xTempSubStorage = m_aTestHelper.openSubStorage( xTempStorage,
63                                                                     "SubStorage1",
64                                                                     ElementModes.WRITE );
65             if ( xTempSubStorage == null )
66             {
67                 m_aTestHelper.Error( "Can't create substorage!" );
68                 return false;
69             }
70 
71             byte pBytes1[] = { 1, 1, 1, 1, 1 };
72 
73             // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
74             if ( !m_aTestHelper.WriteBytesToSubstream( xTempSubStorage,
75                                                         "SubStream1",
76                                                         "MediaType1",
77                                                         true,
78                                                         pBytes1,
79                                                         aRelations1 ) )
80                 return false;
81 
82             // set Relations for storages and check that "IsRoot" and "OpenMode" properties are set correctly
83             if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempStorage,
84                                                             true,
85                                                             ElementModes.WRITE,
86                                                             aRelations1 ) )
87                 return false;
88 
89             // set Relations for storages and check that "IsRoot" and "OpenMode" properties are set correctly
90             if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempSubStorage,
91                                                             false,
92                                                             ElementModes.WRITE,
93                                                             aRelations1 ) )
94                 return false;
95 
96             // commit substorage first
97             if ( !m_aTestHelper.commitStorage( xTempSubStorage ) )
98                 return false;
99 
100             // commit the root storage so the contents must be stored now
101             if ( !m_aTestHelper.commitStorage( xTempStorage ) )
102                 return false;
103 
104             // dispose substorage
105             if ( !m_aTestHelper.disposeStorage( xTempSubStorage ) )
106                 return false;
107 
108             // ================================================
109             // check substorage
110             // ================================================
111 
112             if ( !checkSubStorages( xTempStorage, pBytes1, aRelations1 ) )
113                 return false;
114 
115             // dispose used storage to free resources
116             if ( !m_aTestHelper.disposeStorage( xTempStorage ) )
117                 return false;
118 
119             // ================================================
120             // now check all the written information with readwrite access
121             // ================================================
122 
123             XStorage xResWriteStorage = m_aTestHelper.createStorageFromStream( m_xStorageFactory,
124                                                                             xTempFileStream,
125                                                                             ElementModes.WRITE );
126             if ( xResWriteStorage == null )
127             {
128                 m_aTestHelper.Error( "Can't open storage based on input stream!" );
129                 return false;
130             }
131 
132             if ( !m_aTestHelper.checkStorageProperties( xResWriteStorage,
133                                                         true,
134                                                         ElementModes.WRITE,
135                                                         aRelations1 ) )
136                 return false;
137 
138             if( !checkSubStorages( xResWriteStorage, pBytes1, aRelations1 ) )
139                 return false;
140 
141             // try to open for writing after opening for reading
142             XStorage xResWSubStorage = m_aTestHelper.openSubStorage( xResWriteStorage,
143                                                                     "SubStorage1",
144                                                                     ElementModes.WRITE );
145             if ( xResWSubStorage == null )
146             {
147                 m_aTestHelper.Error( "Can't open substorage for writing after it was opened for reading!" );
148                 return false;
149             }
150 
151             if ( !m_aTestHelper.checkStorageProperties( xResWSubStorage,
152                                                         false,
153                                                         ElementModes.WRITE,
154                                                         aRelations1 ) )
155                 return false;
156 
157             if ( !m_aTestHelper.checkStream( xResWSubStorage,
158                                             "SubStream1",
159                                             "MediaType1",
160                                             pBytes1,
161                                             aRelations1 ) )
162                 return false;
163 
164             // dispose used storage to free resources
165             if ( !m_aTestHelper.disposeStorage( xResWriteStorage ) )
166                 return false;
167 
168 
169             // ================================================
170             // now check all the written information with readonly access
171             // ================================================
172 
173             // close the output part of the temporary stream
174             // the output part must present since we already wrote to the stream
175             if ( !m_aTestHelper.closeOutput( xTempFileStream ) )
176                 return false;
177 
178             XInputStream xTempInStream = m_aTestHelper.getInputStream( xTempFileStream );
179             if ( xTempInStream == null )
180                 return false;
181 
182             // open input stream
183             // since no mode is provided the result storage must be opened readonly
184             XStorage xResultStorage = m_aTestHelper.createStorageFromInputStream( m_xStorageFactory,
185                                                                                     xTempInStream );
186             if ( xResultStorage == null )
187             {
188                 m_aTestHelper.Error( "Can't open storage based on input stream!" );
189                 return false;
190             }
191 
192             if ( !m_aTestHelper.checkStorageProperties( xResultStorage,
193                                                         true,
194                                                         ElementModes.READ,
195                                                         aRelations1 ) )
196                 return false;
197 
198             if( !checkSubStorages( xResultStorage, pBytes1, aRelations1 ) )
199                 return false;
200 
201             return true;
202         }
203         catch( Exception e )
204         {
205             m_aTestHelper.Error( "Exception: " + e );
206             return false;
207         }
208     }
209 
210     private boolean checkSubStorages( XStorage xStorage, byte[] pBytes1, StringPair[][] aRelations )
211     {
212         XStorage xReadSubStorage1 = m_aTestHelper.openSubStorage( xStorage,
213                                                                 "SubStorage1",
214                                                                 ElementModes.READ );
215 
216         XStorage xReadSubStorage2 = m_aTestHelper.openSubStorage( xStorage,
217                                                                 "SubStorage1",
218                                                                 ElementModes.READ );
219 
220         if ( xReadSubStorage1 == null || xReadSubStorage2 == null )
221         {
222             m_aTestHelper.Error( "Can't open substorage for reading!" );
223             return false;
224         }
225 
226         if ( !m_aTestHelper.checkStorageProperties( xReadSubStorage1,
227                                                     false,
228                                                     ElementModes.READ,
229                                                     aRelations ) )
230             return false;
231 
232         if ( !m_aTestHelper.checkStorageProperties( xReadSubStorage2,
233                                                     false,
234                                                     ElementModes.READ,
235                                                     aRelations ) )
236             return false;
237 
238         if ( !m_aTestHelper.checkStream( xReadSubStorage1,
239                                             "SubStream1",
240                                             "MediaType1",
241                                             pBytes1,
242                                             aRelations ) )
243             return false;
244 
245         if ( !m_aTestHelper.checkStream( xReadSubStorage2,
246                                         "SubStream1",
247                                         "MediaType1",
248                                         pBytes1,
249                                         aRelations ) )
250             return false;
251 
252         if ( !m_aTestHelper.disposeStorage( xReadSubStorage1 ) )
253             return false;
254 
255         if ( !m_aTestHelper.disposeStorage( xReadSubStorage2 ) )
256             return false;
257 
258         return true;
259     }
260 }
261 
262