1 package complex.storages; 2 3 import java.net.URI; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import java.util.zip.ZipInputStream; 7 import java.util.zip.ZipEntry; 8 9 import com.sun.star.uno.XInterface; 10 import com.sun.star.lang.XMultiServiceFactory; 11 import com.sun.star.lang.XSingleServiceFactory; 12 13 import com.sun.star.bridge.XUnoUrlResolver; 14 import com.sun.star.uno.UnoRuntime; 15 import com.sun.star.uno.XInterface; 16 import com.sun.star.io.XStream; 17 import com.sun.star.io.XInputStream; 18 19 import com.sun.star.embed.*; 20 21 import share.LogWriter; 22 import complex.storages.TestHelper; 23 import complex.storages.StorageTest; 24 25 public class RegressionTest_i61909 implements StorageTest { 26 27 XMultiServiceFactory m_xMSF; 28 XSingleServiceFactory m_xStorageFactory; 29 TestHelper m_aTestHelper; 30 31 public RegressionTest_i61909( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory, LogWriter aLogWriter ) 32 { 33 m_xMSF = xMSF; 34 m_xStorageFactory = xStorageFactory; 35 m_aTestHelper = new TestHelper( aLogWriter, "RegressionTest_i61909: " ); 36 } 37 38 public boolean test() 39 { 40 try 41 { 42 String sTempFileURL = m_aTestHelper.CreateTempFile( m_xMSF ); 43 if ( sTempFileURL == null || sTempFileURL == "" ) 44 { 45 m_aTestHelper.Error( "No valid temporary file was created!" ); 46 return false; 47 } 48 49 // create storage based on the temporary stream 50 Object pArgs[] = new Object[2]; 51 pArgs[0] = (Object) sTempFileURL; 52 pArgs[1] = new Integer( ElementModes.WRITE ); 53 54 Object oTempStorage = m_xStorageFactory.createInstanceWithArguments( pArgs ); 55 XStorage xTempStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTempStorage ); 56 if ( xTempStorage == null ) 57 { 58 m_aTestHelper.Error( "Can't create temporary storage representation!" ); 59 return false; 60 } 61 62 byte pBytes[] = new byte[36000]; 63 for ( int nInd = 0; nInd < 36000; nInd++ ) 64 pBytes[nInd] = (byte)( nInd % 128 ); 65 66 // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes 67 if ( !m_aTestHelper.WriteBytesToSubstream( xTempStorage, "SubStream1", "MediaType1", true, pBytes ) ) 68 return false; 69 70 // open a new substorage 71 XStorage xTempSubStorage = m_aTestHelper.openSubStorage( xTempStorage, 72 "SubStorage1", 73 ElementModes.WRITE ); 74 if ( xTempSubStorage == null ) 75 { 76 m_aTestHelper.Error( "Can't create substorage!" ); 77 return false; 78 } 79 80 // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes 81 if ( !m_aTestHelper.WriteBytesToSubstream( xTempSubStorage, "SubStream2", "MediaType2", true, pBytes ) ) 82 return false; 83 84 // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly 85 if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempStorage, 86 "MediaType3", 87 true, 88 ElementModes.WRITE ) ) 89 return false; 90 91 // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly 92 if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempSubStorage, 93 "MediaType4", 94 false, 95 ElementModes.WRITE ) ) 96 return false; 97 98 // commit substorage first 99 if ( !m_aTestHelper.commitStorage( xTempSubStorage ) ) 100 return false; 101 102 // commit the root storage so the contents must be stored now 103 if ( !m_aTestHelper.commitStorage( xTempStorage ) ) 104 return false; 105 106 // dispose used storage to free resources 107 if ( !m_aTestHelper.disposeStorage( xTempStorage ) ) 108 return false; 109 110 // ================================================ 111 // now reopen the storage, and insert a new stream 112 // ================================================ 113 114 Object oStep2TempStorage = m_xStorageFactory.createInstanceWithArguments( pArgs ); 115 XStorage xStep2TempStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oStep2TempStorage ); 116 if ( xStep2TempStorage == null ) 117 { 118 m_aTestHelper.Error( "Can't create temporary storage representation!" ); 119 return false; 120 } 121 122 // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes 123 if ( !m_aTestHelper.WriteBytesToSubstream( xStep2TempStorage, "SubStream3", "MediaType5", true, pBytes ) ) 124 return false; 125 126 // commit the root storage so the contents must be stored now 127 if ( !m_aTestHelper.commitStorage( xStep2TempStorage ) ) 128 return false; 129 130 // dispose used storage to free resources 131 if ( !m_aTestHelper.disposeStorage( xStep2TempStorage ) ) 132 return false; 133 134 // ================================================ 135 // now access the stream using ZipInputStream 136 // ================================================ 137 138 URI aUri = new URI( sTempFileURL ); 139 File aFile = new File( aUri ); 140 FileInputStream aFileStream = new FileInputStream( aFile ); 141 ZipInputStream aZipStream = new ZipInputStream( aFileStream ); 142 143 ZipEntry aEntry; 144 int nNumber = 0; 145 m_aTestHelper.Message( "Available entries:" ); 146 while ( ( aEntry = aZipStream.getNextEntry() ) != null ) 147 { 148 nNumber++; 149 m_aTestHelper.Message( aEntry.getName() ); 150 } 151 152 if ( nNumber != 6 ) 153 { 154 m_aTestHelper.Error( "Wrong number of entries: " + nNumber + ", Expected: 6" ); 155 return false; 156 } 157 158 return true; 159 } 160 catch( Exception e ) 161 { 162 m_aTestHelper.Error( "Exception: " + e ); 163 return false; 164 } 165 } 166 } 167 168