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 import com.sun.star.io.XInputStream; 12 13 import com.sun.star.embed.*; 14 15 import share.LogWriter; 16 import complex.storages.TestHelper; 17 import complex.storages.StorageTest; 18 19 public class RegressionTest_i30400 implements StorageTest { 20 21 XMultiServiceFactory m_xMSF; 22 XSingleServiceFactory m_xStorageFactory; 23 TestHelper m_aTestHelper; 24 25 public RegressionTest_i30400( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory, LogWriter aLogWriter ) 26 { 27 m_xMSF = xMSF; 28 m_xStorageFactory = xStorageFactory; 29 m_aTestHelper = new TestHelper( aLogWriter, "RegressionTest_i30400: " ); 30 } 31 32 public boolean test() 33 { 34 try 35 { 36 // ================================================ 37 // create a temporary stream and a storage based on it 38 // fill the storage with the data that will be used for testing 39 // ================================================ 40 41 XStream xTempFileStream = m_aTestHelper.CreateTempFileStream( m_xMSF ); 42 if ( xTempFileStream == null ) 43 return false; 44 45 // create storage based on the temporary stream 46 Object pArgs[] = new Object[2]; 47 pArgs[0] = (Object) xTempFileStream; 48 pArgs[1] = new Integer( ElementModes.WRITE ); 49 byte pBytes1[] = { 1, 1, 1, 1, 1 }; 50 String pPass1 = "1, 2, 3, 4, 5"; 51 52 Object oTempStorage = m_xStorageFactory.createInstanceWithArguments( pArgs ); 53 XStorage xTempStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTempStorage ); 54 if ( xTempStorage == null ) 55 { 56 m_aTestHelper.Error( "Can't create temporary storage representation!" ); 57 return false; 58 } 59 60 // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes 61 if ( !m_aTestHelper.WriteBytesToSubstream( xTempStorage, "Stream1", "MediaType1", true, pBytes1 ) ) 62 return false; 63 64 // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes 65 if ( !m_aTestHelper.WriteBytesToEncrSubstream( xTempStorage, "EncrStream1", "MediaType2", true, pBytes1, pPass1 ) ) 66 return false; 67 68 69 // open a new substorage 70 XStorage xTempSubStorage = m_aTestHelper.openSubStorage( xTempStorage, 71 "SubStorage1", 72 ElementModes.WRITE ); 73 if ( xTempSubStorage == null ) 74 { 75 m_aTestHelper.Error( "Can't create substorage!" ); 76 return false; 77 } 78 79 // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes 80 if ( !m_aTestHelper.WriteBytesToSubstream( xTempSubStorage, "SubStream1", "MediaType3", true, pBytes1 ) ) 81 return false; 82 83 // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes 84 if ( !m_aTestHelper.WriteBytesToEncrSubstream( xTempSubStorage, "SubEncrStream1", "MediaType4", true, pBytes1, pPass1 ) ) 85 return false; 86 87 // open a new substorage in the existing substorage 88 XStorage xTempSubSubStorage = m_aTestHelper.openSubStorage( xTempSubStorage, 89 "SubSubStorage1", 90 ElementModes.WRITE ); 91 if ( xTempSubStorage == null ) 92 { 93 m_aTestHelper.Error( "Can't create substorage!" ); 94 return false; 95 } 96 97 // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes 98 if ( !m_aTestHelper.WriteBytesToSubstream( xTempSubSubStorage, "SubSubStream1", "MediaType5", true, pBytes1 ) ) 99 return false; 100 101 // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly 102 if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempSubSubStorage, 103 "MediaType6", 104 false, 105 ElementModes.WRITE ) ) 106 return false; 107 108 109 // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly 110 if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempSubStorage, 111 "MediaType7", 112 false, 113 ElementModes.WRITE ) ) 114 return false; 115 116 // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly 117 if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempStorage, 118 "MediaType8", 119 true, 120 ElementModes.WRITE ) ) 121 return false; 122 123 // ================================================ 124 // check the copying with renaming 125 // ================================================ 126 127 if ( !TestCopyWithRenaming( xTempStorage, xTempSubStorage, xTempSubSubStorage ) ) 128 return false; 129 130 // ================================================ 131 // commit the storages 132 // ================================================ 133 134 // commit lowlevel substorage 135 if ( !m_aTestHelper.commitStorage( xTempSubSubStorage ) ) 136 return false; 137 138 // commit substorage 139 if ( !m_aTestHelper.commitStorage( xTempSubStorage ) ) 140 return false; 141 142 // commit the root storage so the contents must be stored now 143 if ( !m_aTestHelper.commitStorage( xTempStorage ) ) 144 return false; 145 146 // ================================================ 147 // dispose the storages 148 // ================================================ 149 150 // dispose lowerest substorage 151 if ( !m_aTestHelper.disposeStorage( xTempSubSubStorage ) ) 152 return false; 153 154 // dispose substorage 155 if ( !m_aTestHelper.disposeStorage( xTempSubStorage ) ) 156 return false; 157 158 // dispose the temporary storage 159 if ( !m_aTestHelper.disposeStorage( xTempStorage ) ) 160 return false; 161 162 // ================================================ 163 // reopen the target storage readonly, and check the copying with renaming 164 // ================================================ 165 166 pArgs[1] = new Integer( ElementModes.READ ); 167 oTempStorage = m_xStorageFactory.createInstanceWithArguments( pArgs ); 168 xTempStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTempStorage ); 169 if ( xTempStorage == null ) 170 { 171 m_aTestHelper.Error( "Can't create temporary storage representation!" ); 172 return false; 173 } 174 175 // open the substorages 176 177 xTempSubStorage = m_aTestHelper.openSubStorage( xTempStorage, 178 "SubStorage1", 179 ElementModes.READ ); 180 if ( xTempSubStorage == null ) 181 { 182 m_aTestHelper.Error( "Can't create substorage!" ); 183 return false; 184 } 185 186 // open the lowlevel substorages 187 188 xTempSubSubStorage = m_aTestHelper.openSubStorage( xTempSubStorage, 189 "SubSubStorage1", 190 ElementModes.READ ); 191 if ( xTempSubSubStorage == null ) 192 { 193 m_aTestHelper.Error( "Can't create substorage!" ); 194 return false; 195 } 196 197 // test the copying with renaming 198 if ( !TestCopyWithRenaming( xTempStorage, xTempSubStorage, xTempSubSubStorage ) ) 199 return false; 200 201 202 // the storage is based on the temporary stream so it can be left undisposed, since it does not lock 203 // any resource, later the garbage collector will release the object and it must die by refcount 204 205 return true; 206 } 207 catch( Exception e ) 208 { 209 m_aTestHelper.Error( "Exception: " + e ); 210 return false; 211 } 212 } 213 214 215 public boolean TestCopyWithRenaming( XStorage xTempStorage, XStorage xTempSubStorage, XStorage xTempSubSubStorage ) 216 throws com.sun.star.uno.Exception 217 { 218 // ================================================ 219 // create a second temporary stream and copy all the staff there 220 // with renaming, check the success 221 // ================================================ 222 223 XStream xTempFileStream2 = m_aTestHelper.CreateTempFileStream( m_xMSF ); 224 if ( xTempFileStream2 == null ) 225 return false; 226 227 Object pArgs[] = new Object[2]; 228 pArgs[0] = (Object) xTempFileStream2; 229 pArgs[1] = new Integer( ElementModes.WRITE ); 230 byte pBytes1[] = { 1, 1, 1, 1, 1 }; 231 String pPass1 = "1, 2, 3, 4, 5"; 232 233 Object oTempStorage2 = m_xStorageFactory.createInstanceWithArguments( pArgs ); 234 XStorage xTempStorage2 = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTempStorage2 ); 235 if ( xTempStorage2 == null ) 236 { 237 m_aTestHelper.Error( "Can't create temporary storage representation!" ); 238 return false; 239 } 240 241 // open a new substorage 242 XStorage xTempSubStorage2 = m_aTestHelper.openSubStorage( xTempStorage2, 243 "SubStorage1_target", 244 ElementModes.WRITE ); 245 if ( xTempSubStorage2 == null ) 246 { 247 m_aTestHelper.Error( "Can't create substorage!" ); 248 return false; 249 } 250 251 // open a new substorage in the existing substorage 252 XStorage xTempSubSubStorage2 = m_aTestHelper.openSubStorage( xTempSubStorage2, 253 "SubSubStorage1_target", 254 ElementModes.WRITE ); 255 if ( xTempSubSubStorage2 == null ) 256 { 257 m_aTestHelper.Error( "Can't create substorage!" ); 258 return false; 259 } 260 261 // make a copy with renaming on lowerest level 262 if ( !m_aTestHelper.copyElementTo( xTempSubSubStorage, "SubSubStream1", xTempSubSubStorage2, "SubSubStream1_renamed" ) ) 263 return false; 264 265 // make a copy with renaming on the next level 266 267 if ( !m_aTestHelper.copyElementTo( xTempSubStorage, "SubStream1", xTempSubStorage2, "SubStream1_renamed" ) ) 268 return false; 269 270 if ( !m_aTestHelper.copyElementTo( xTempSubStorage, "SubEncrStream1", xTempSubStorage2, "SubEncrStream1_renamed" ) ) 271 return false; 272 273 if ( !m_aTestHelper.copyElementTo( xTempSubStorage, "SubSubStorage1", xTempSubStorage2, "SubSubStorage1_renamed" ) ) 274 return false; 275 276 // make a copy with renaming of subelements of the root storage 277 278 if ( !m_aTestHelper.copyElementTo( xTempStorage, "Stream1", xTempStorage2, "Stream1_renamed" ) ) 279 return false; 280 281 if ( !m_aTestHelper.copyElementTo( xTempStorage, "EncrStream1", xTempStorage2, "EncrStream1_renamed" ) ) 282 return false; 283 284 if ( !m_aTestHelper.copyElementTo( xTempStorage, "SubStorage1", xTempStorage2, "SubStorage1_renamed" ) ) 285 return false; 286 287 // ================================================ 288 // commit the storages, and check the renaming in all stages 289 // ================================================ 290 291 // commit substorage to let the renaming take place 292 if ( !m_aTestHelper.commitStorage( xTempSubSubStorage2 ) ) 293 return false; 294 295 // commit substorage to let the renaming take place 296 if ( !m_aTestHelper.commitStorage( xTempSubStorage2 ) ) 297 return false; 298 299 // commit the root storage so the contents must be stored now 300 if ( !m_aTestHelper.commitStorage( xTempStorage2 ) ) 301 return false; 302 303 // ================================================ 304 // dispose the storages 305 // ================================================ 306 307 // dispose lowerest substorage 308 if ( !m_aTestHelper.disposeStorage( xTempSubSubStorage2 ) ) 309 return false; 310 311 // dispose substorage 312 if ( !m_aTestHelper.disposeStorage( xTempSubStorage2 ) ) 313 return false; 314 315 // dispose the temporary storage 316 if ( !m_aTestHelper.disposeStorage( xTempStorage2 ) ) 317 return false; 318 319 // ================================================ 320 // reopen the target storage readonly, and check the contents 321 // ================================================ 322 323 pArgs[1] = new Integer( ElementModes.READ ); 324 oTempStorage2 = m_xStorageFactory.createInstanceWithArguments( pArgs ); 325 xTempStorage2 = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTempStorage2 ); 326 if ( xTempStorage2 == null ) 327 { 328 m_aTestHelper.Error( "Can't create temporary storage representation!" ); 329 return false; 330 } 331 332 // open the substorages 333 334 XStorage xTempSubStorage2_target = m_aTestHelper.openSubStorage( xTempStorage2, 335 "SubStorage1_target", 336 ElementModes.READ ); 337 if ( xTempSubStorage2_target == null ) 338 { 339 m_aTestHelper.Error( "Can't create substorage!" ); 340 return false; 341 } 342 343 XStorage xTempSubStorage2_renamed = m_aTestHelper.openSubStorage( xTempStorage2, 344 "SubStorage1_renamed", 345 ElementModes.READ ); 346 if ( xTempSubStorage2_renamed == null ) 347 { 348 m_aTestHelper.Error( "Can't create substorage!" ); 349 return false; 350 } 351 352 // open the lowlevel substorages 353 354 XStorage xTempSubSubStorage2_inRenamed = m_aTestHelper.openSubStorage( xTempSubStorage2_renamed, 355 "SubSubStorage1", 356 ElementModes.READ ); 357 if ( xTempSubSubStorage2_inRenamed == null ) 358 { 359 m_aTestHelper.Error( "Can't create substorage!" ); 360 return false; 361 } 362 363 XStorage xTempSubSubStorage2_renamed = m_aTestHelper.openSubStorage( xTempSubStorage2_target, 364 "SubSubStorage1_renamed", 365 ElementModes.READ ); 366 if ( xTempSubSubStorage2_renamed == null ) 367 { 368 m_aTestHelper.Error( "Can't create substorage!" ); 369 return false; 370 } 371 372 XStorage xTempSubSubStorage2_target = m_aTestHelper.openSubStorage( xTempSubStorage2_target, 373 "SubSubStorage1_target", 374 ElementModes.READ ); 375 if ( xTempSubSubStorage2_target == null ) 376 { 377 m_aTestHelper.Error( "Can't create substorage!" ); 378 return false; 379 } 380 381 // check the storages 382 383 if ( !m_aTestHelper.checkStorageProperties( xTempSubSubStorage2_inRenamed, "MediaType6", false, ElementModes.READ ) ) 384 return false; 385 386 if ( !m_aTestHelper.checkStorageProperties( xTempSubSubStorage2_renamed, "MediaType6", false, ElementModes.READ ) ) 387 return false; 388 389 if ( !m_aTestHelper.checkStorageProperties( xTempSubStorage2_renamed, "MediaType7", false, ElementModes.READ ) ) 390 return false; 391 392 393 // check the streams 394 395 396 // sub sub level 397 398 if ( !m_aTestHelper.checkStream( xTempSubSubStorage2_inRenamed, "SubSubStream1", "MediaType5", true, pBytes1 ) ) 399 return false; 400 401 if ( !m_aTestHelper.checkStream( xTempSubSubStorage2_renamed, "SubSubStream1", "MediaType5", true, pBytes1 ) ) 402 return false; 403 404 if ( !m_aTestHelper.checkStream( xTempSubSubStorage2_target, "SubSubStream1_renamed", "MediaType5", true, pBytes1 ) ) 405 return false; 406 407 // sub level 408 409 if ( !m_aTestHelper.checkStream( xTempSubStorage2_renamed, "SubStream1", "MediaType3", true, pBytes1 ) ) 410 return false; 411 412 if ( !m_aTestHelper.checkEncrStream( xTempSubStorage2_renamed, "SubEncrStream1", "MediaType4", pBytes1, pPass1 ) ) 413 return false; 414 415 if ( !m_aTestHelper.checkStream( xTempSubStorage2_target, "SubStream1_renamed", "MediaType3", true, pBytes1 ) ) 416 return false; 417 418 if ( !m_aTestHelper.checkEncrStream( xTempSubStorage2_target, "SubEncrStream1_renamed", "MediaType4", pBytes1, pPass1 ) ) 419 return false; 420 421 // root storage level 422 423 if ( !m_aTestHelper.checkStream( xTempStorage2, "Stream1_renamed", "MediaType1", true, pBytes1 ) ) 424 return false; 425 426 if ( !m_aTestHelper.checkEncrStream( xTempStorage2, "EncrStream1_renamed", "MediaType2", pBytes1, pPass1 ) ) 427 return false; 428 429 // the storage is based on the temporary stream so it can be left undisposed, since it does not lock 430 // any resource, later the garbage collector will release the object and it must die by refcount 431 432 return true; 433 } 434 } 435 436