xref: /AOO41X/main/package/qa/ofopxmlstorages/Test08.java (revision a740f2aac71e58ccad9369fb423cc251ef909663)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 package complex.ofopxmlstorages;
23 
24 import com.sun.star.uno.XInterface;
25 import com.sun.star.lang.XMultiServiceFactory;
26 import com.sun.star.lang.XSingleServiceFactory;
27 
28 import com.sun.star.bridge.XUnoUrlResolver;
29 import com.sun.star.uno.UnoRuntime;
30 import com.sun.star.uno.XInterface;
31 import com.sun.star.io.XStream;
32 import com.sun.star.io.XInputStream;
33 
34 import com.sun.star.embed.*;
35 import com.sun.star.beans.StringPair;
36 
37 import share.LogWriter;
38 import complex.ofopxmlstorages.TestHelper;
39 import complex.ofopxmlstorages.StorageTest;
40 
41 public class Test08 implements StorageTest {
42 
43     XMultiServiceFactory m_xMSF;
44     XSingleServiceFactory m_xStorageFactory;
45     TestHelper m_aTestHelper;
46 
Test08( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory, LogWriter aLogWriter )47     public Test08( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory, LogWriter aLogWriter )
48     {
49         m_xMSF = xMSF;
50         m_xStorageFactory = xStorageFactory;
51         m_aTestHelper = new TestHelper( aLogWriter, "Test08: " );
52     }
53 
test()54     public boolean test()
55     {
56         StringPair[][] aRelations1 =
57             { { new StringPair( "Id", "Num1" ) },
58               { new StringPair( "Target", "TargetURLValue1" ), new StringPair( "Id", "Num6" ) },
59               { new StringPair( "Target", "" ), new StringPair( "Id", "Num7" ) },
60               { new StringPair( "Id", "Num2" ), new StringPair( "TargetMode", "Internal1" ), new StringPair( "Type", "unknown1" ), new StringPair( "Target", "URL value 1" ) },
61               { new StringPair( "Id", "Num3" ), new StringPair( "TargetMode", "Internal1" ), new StringPair( "Type", "unknown1" ), new StringPair( "Target", "URL value 1" ) },
62               { new StringPair( "Id", "Num4" ), new StringPair( "TargetMode", "Internal1" ), new StringPair( "Type", "unknown1" ), new StringPair( "Target", "URL value 1" ) },
63               { new StringPair( "Id", "Num5" ), new StringPair( "TargetMode", "" ), new StringPair( "Type", "unknown1" ), new StringPair( "Target", "URL value1" ) }
64             };
65 
66         try
67         {
68             XStream xTempFileStream = m_aTestHelper.CreateTempFileStream( m_xMSF );
69             if ( xTempFileStream == null )
70                 return false;
71 
72             // create storage based on the temporary stream
73             XStorage xTempStorage = m_aTestHelper.createStorageFromStream( m_xStorageFactory,
74                                                                             xTempFileStream,
75                                                                             ElementModes.WRITE );
76             if ( xTempStorage == null )
77             {
78                 m_aTestHelper.Error( "Can't create temporary storage representation!" );
79                 return false;
80             }
81 
82             // open a new substorage
83             XStorage xTempSubStorage = m_aTestHelper.openSubStorage( xTempStorage,
84                                                                     "SubStorage1",
85                                                                     ElementModes.WRITE );
86             if ( xTempSubStorage == null )
87             {
88                 m_aTestHelper.Error( "Can't create substorage!" );
89                 return false;
90             }
91 
92             byte pBytes1[] = { 1, 1, 1, 1, 1 };
93 
94             // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
95             if ( !m_aTestHelper.WriteBytesToSubstream( xTempSubStorage,
96                                                         "SubStream1",
97                                                         "MediaType1",
98                                                         true,
99                                                         pBytes1,
100                                                         aRelations1 ) )
101                 return false;
102 
103             // set Relations for storages and check that "IsRoot" and "OpenMode" properties are set correctly
104             if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempStorage,
105                                                             true,
106                                                             ElementModes.WRITE,
107                                                             aRelations1 ) )
108                 return false;
109 
110             // set Relations for storages and check that "IsRoot" and "OpenMode" properties are set correctly
111             if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempSubStorage,
112                                                             false,
113                                                             ElementModes.WRITE,
114                                                             aRelations1 ) )
115                 return false;
116 
117             // commit substorage first
118             if ( !m_aTestHelper.commitStorage( xTempSubStorage ) )
119                 return false;
120 
121             // commit the root storage so the contents must be stored now
122             if ( !m_aTestHelper.commitStorage( xTempStorage ) )
123                 return false;
124 
125             // dispose substorage
126             if ( !m_aTestHelper.disposeStorage( xTempSubStorage ) )
127                 return false;
128 
129             // ================================================
130             // check substorage
131             // ================================================
132 
133             if ( !checkSubStorages( xTempStorage, pBytes1, aRelations1 ) )
134                 return false;
135 
136             // dispose used storage to free resources
137             if ( !m_aTestHelper.disposeStorage( xTempStorage ) )
138                 return false;
139 
140             // ================================================
141             // now check all the written information with readwrite access
142             // ================================================
143 
144             XStorage xResWriteStorage = m_aTestHelper.createStorageFromStream( m_xStorageFactory,
145                                                                             xTempFileStream,
146                                                                             ElementModes.WRITE );
147             if ( xResWriteStorage == null )
148             {
149                 m_aTestHelper.Error( "Can't open storage based on input stream!" );
150                 return false;
151             }
152 
153             if ( !m_aTestHelper.checkStorageProperties( xResWriteStorage,
154                                                         true,
155                                                         ElementModes.WRITE,
156                                                         aRelations1 ) )
157                 return false;
158 
159             if( !checkSubStorages( xResWriteStorage, pBytes1, aRelations1 ) )
160                 return false;
161 
162             // try to open for writing after opening for reading
163             XStorage xResWSubStorage = m_aTestHelper.openSubStorage( xResWriteStorage,
164                                                                     "SubStorage1",
165                                                                     ElementModes.WRITE );
166             if ( xResWSubStorage == null )
167             {
168                 m_aTestHelper.Error( "Can't open substorage for writing after it was opened for reading!" );
169                 return false;
170             }
171 
172             if ( !m_aTestHelper.checkStorageProperties( xResWSubStorage,
173                                                         false,
174                                                         ElementModes.WRITE,
175                                                         aRelations1 ) )
176                 return false;
177 
178             if ( !m_aTestHelper.checkStream( xResWSubStorage,
179                                             "SubStream1",
180                                             "MediaType1",
181                                             pBytes1,
182                                             aRelations1 ) )
183                 return false;
184 
185             // dispose used storage to free resources
186             if ( !m_aTestHelper.disposeStorage( xResWriteStorage ) )
187                 return false;
188 
189 
190             // ================================================
191             // now check all the written information with readonly access
192             // ================================================
193 
194             // close the output part of the temporary stream
195             // the output part must present since we already wrote to the stream
196             if ( !m_aTestHelper.closeOutput( xTempFileStream ) )
197                 return false;
198 
199             XInputStream xTempInStream = m_aTestHelper.getInputStream( xTempFileStream );
200             if ( xTempInStream == null )
201                 return false;
202 
203             // open input stream
204             // since no mode is provided the result storage must be opened readonly
205             XStorage xResultStorage = m_aTestHelper.createStorageFromInputStream( m_xStorageFactory,
206                                                                                     xTempInStream );
207             if ( xResultStorage == null )
208             {
209                 m_aTestHelper.Error( "Can't open storage based on input stream!" );
210                 return false;
211             }
212 
213             if ( !m_aTestHelper.checkStorageProperties( xResultStorage,
214                                                         true,
215                                                         ElementModes.READ,
216                                                         aRelations1 ) )
217                 return false;
218 
219             if( !checkSubStorages( xResultStorage, pBytes1, aRelations1 ) )
220                 return false;
221 
222             return true;
223         }
224         catch( Exception e )
225         {
226             m_aTestHelper.Error( "Exception: " + e );
227             return false;
228         }
229     }
230 
checkSubStorages( XStorage xStorage, byte[] pBytes1, StringPair[][] aRelations )231     private boolean checkSubStorages( XStorage xStorage, byte[] pBytes1, StringPair[][] aRelations )
232     {
233         XStorage xReadSubStorage1 = m_aTestHelper.openSubStorage( xStorage,
234                                                                 "SubStorage1",
235                                                                 ElementModes.READ );
236 
237         XStorage xReadSubStorage2 = m_aTestHelper.openSubStorage( xStorage,
238                                                                 "SubStorage1",
239                                                                 ElementModes.READ );
240 
241         if ( xReadSubStorage1 == null || xReadSubStorage2 == null )
242         {
243             m_aTestHelper.Error( "Can't open substorage for reading!" );
244             return false;
245         }
246 
247         if ( !m_aTestHelper.checkStorageProperties( xReadSubStorage1,
248                                                     false,
249                                                     ElementModes.READ,
250                                                     aRelations ) )
251             return false;
252 
253         if ( !m_aTestHelper.checkStorageProperties( xReadSubStorage2,
254                                                     false,
255                                                     ElementModes.READ,
256                                                     aRelations ) )
257             return false;
258 
259         if ( !m_aTestHelper.checkStream( xReadSubStorage1,
260                                             "SubStream1",
261                                             "MediaType1",
262                                             pBytes1,
263                                             aRelations ) )
264             return false;
265 
266         if ( !m_aTestHelper.checkStream( xReadSubStorage2,
267                                         "SubStream1",
268                                         "MediaType1",
269                                         pBytes1,
270                                         aRelations ) )
271             return false;
272 
273         if ( !m_aTestHelper.disposeStorage( xReadSubStorage1 ) )
274             return false;
275 
276         if ( !m_aTestHelper.disposeStorage( xReadSubStorage2 ) )
277             return false;
278 
279         return true;
280     }
281 }
282 
283