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 storagetesting; 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 32 import com.sun.star.embed.*; 33 import com.sun.star.container.XNameAccess; 34 35 import storagetesting.TestHelper; 36 import storagetesting.StorageTest; 37 38 public class Test03 implements StorageTest { 39 40 XMultiServiceFactory m_xMSF; 41 XSingleServiceFactory m_xStorageFactory; 42 TestHelper m_aTestHelper; 43 Test03( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory )44 public Test03( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory ) 45 { 46 m_xMSF = xMSF; 47 m_xStorageFactory = xStorageFactory; 48 m_aTestHelper = new TestHelper( "Test03: " ); 49 } 50 test()51 public boolean test() 52 { 53 try 54 { 55 // create temporary storage based on arbitrary medium 56 // after such a storage is closed it is lost 57 Object oTempStorage = m_xStorageFactory.createInstance(); 58 XStorage xTempStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTempStorage ); 59 if ( xTempStorage == null ) 60 { 61 m_aTestHelper.Error( "Can't create temporary storage representation!" ); 62 return false; 63 } 64 65 // open a new substorage 66 XStorage xTempSubStorage = m_aTestHelper.openSubStorage( xTempStorage, 67 "SubStorage1", 68 ElementModes.ELEMENT_WRITE ); 69 if ( xTempSubStorage == null ) 70 { 71 m_aTestHelper.Error( "Can't create substorage!" ); 72 return false; 73 } 74 75 byte pBytes1[] = { 1, 1, 1, 1, 1 }; 76 77 // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes 78 if ( !m_aTestHelper.WriteBytesToSubstream( xTempStorage, "SubStream1", "MediaType1", true, pBytes1 ) ) 79 return false; 80 81 byte pBytes2[] = { 2, 2, 2, 2, 2 }; 82 83 // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes 84 if ( !m_aTestHelper.WriteBytesToSubstream( xTempSubStorage, "SubStream2", "MediaType2", false, pBytes2 ) ) 85 return false; 86 87 // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly 88 if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempSubStorage, 89 "MediaType3", 90 false, 91 ElementModes.ELEMENT_WRITE ) ) 92 return false; 93 94 if ( !m_aTestHelper.commitStorage( xTempSubStorage ) ) 95 return false; 96 97 if ( !m_aTestHelper.disposeStorage( xTempSubStorage ) ) 98 return false; 99 100 // ================================================ 101 // check storage hyerarchy tree 102 // ================================================ 103 104 // check that isStorageElement() and isStreamElement reacts to nonexisting object correctly 105 try { 106 xTempStorage.isStorageElement( "does not exist" ); 107 m_aTestHelper.Error( "Nonexisting element doesn't detected by isStorageElement() call!" ); 108 return false; 109 } 110 catch( com.sun.star.container.NoSuchElementException ne ) 111 { 112 } 113 catch( Exception e ) 114 { 115 m_aTestHelper.Error( "Wrong exception is thrown by isStorageElement() call: " + e ); 116 return false; 117 } 118 119 try { 120 xTempStorage.isStreamElement( "does not exist" ); 121 m_aTestHelper.Error( "Nonexisting element doesn't detected by isStreamElement() call!" ); 122 return false; 123 } 124 catch( com.sun.star.container.NoSuchElementException ne ) 125 { 126 } 127 catch( Exception e ) 128 { 129 m_aTestHelper.Error( "Wrong exception is thrown by isStreamElement() call: " + e ); 130 return false; 131 } 132 133 XNameAccess xRootNameAccess = (XNameAccess) UnoRuntime.queryInterface( XNameAccess.class, xTempStorage ); 134 if ( xRootNameAccess == null ) 135 { 136 m_aTestHelper.Error( "Root storage doesn't support XNameAccess!" ); 137 return false; 138 } 139 140 try { 141 if ( !xTempStorage.isStorageElement( "SubStorage1" ) || xTempStorage.isStreamElement( "SubStorage1" ) ) 142 { 143 m_aTestHelper.Error( "Child 'SubStorage1' can not be detected as storage!" ); 144 return false; 145 } 146 147 if ( xTempStorage.isStorageElement( "SubStream1" ) || !xTempStorage.isStreamElement( "SubStream1" ) ) 148 { 149 m_aTestHelper.Error( "Child 'SubStream1' can not be detected as stream!" ); 150 return false; 151 } 152 } 153 catch( Exception e ) 154 { 155 m_aTestHelper.Error( "Child's type can not be detected, exception: " + e ); 156 return false; 157 } 158 159 160 // check that root storage contents are represented correctly 161 String sRootCont[] = xRootNameAccess.getElementNames(); 162 163 if ( sRootCont.length != 2 ) 164 { 165 m_aTestHelper.Error( "Root storage contains wrong amount of children!" ); 166 return false; 167 } 168 169 if ( !( sRootCont[0].equals( "SubStorage1" ) && sRootCont[1].equals( "SubStream1" ) 170 || sRootCont[0].equals( "SubStream1" ) && sRootCont[1].equals( "SubStorage1" ) ) 171 || !( xRootNameAccess.hasByName( "SubStream1" ) && xRootNameAccess.hasByName( "SubStorage1" ) ) ) 172 { 173 m_aTestHelper.Error( "Root storage contains wrong list of children!" ); 174 return false; 175 } 176 177 // get storage through XNameAccess 178 XStorage xResultSubStorage = getStorageFromNameAccess( xRootNameAccess, "SubStorage1" ); 179 if ( xResultSubStorage == null ) 180 return false; 181 182 if ( !m_aTestHelper.checkStorageProperties( xResultSubStorage, "MediaType3", false, ElementModes.ELEMENT_READ ) ) 183 return false; 184 185 XNameAccess xChildAccess = (XNameAccess) UnoRuntime.queryInterface( XNameAccess.class, xResultSubStorage ); 186 if ( xChildAccess == null ) 187 { 188 m_aTestHelper.Error( "Child storage doesn't support XNameAccess!" ); 189 return false; 190 } 191 192 if ( !xChildAccess.hasByName( "SubStream2" ) 193 || !xResultSubStorage.isStreamElement( "SubStream2" ) 194 || xResultSubStorage.isStorageElement( "SubStream2" ) ) 195 { 196 m_aTestHelper.Error( "'SubStream2' can not be detected as child stream element of 'SubStorage1'!" ); 197 return false; 198 } 199 200 return true; 201 } 202 catch( Exception e ) 203 { 204 m_aTestHelper.Error( "Exception: " + e ); 205 return false; 206 } 207 } 208 getStorageFromNameAccess( XNameAccess xAccess, String sName )209 public XStorage getStorageFromNameAccess( XNameAccess xAccess, String sName ) 210 { 211 try 212 { 213 Object oStorage = xAccess.getByName( sName ); 214 XStorage xResult = (XStorage) UnoRuntime.queryInterface( XStorage.class, oStorage ); 215 216 if ( xResult != null ) 217 return xResult; 218 else 219 m_aTestHelper.Error( "Can't retrieve substorage '" + sName + "' through XNameAccess!" ); 220 } 221 catch( Exception e ) 222 { 223 m_aTestHelper.Error( "Can't retrieve substorage '" + sName + "' through XNameAccess, exception: " + e ); 224 } 225 226 return null; 227 } 228 229 } 230 231