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 23 24 package mod._dbaccess; 25 26 //import com.sun.star.awt.XControl; 27 //import com.sun.star.awt.XControlModel; 28 import com.sun.star.container.NoSuchElementException; 29 import com.sun.star.lang.WrappedTargetException; 30 import com.sun.star.sdbc.SQLException; 31 import com.sun.star.sdbc.XConnection; 32 import com.sun.star.uno.Exception; 33 import java.io.PrintWriter; 34 35 import lib.TestCase; 36 import lib.TestEnvironment; 37 import lib.TestParameters; 38 import util.DesktopTools; 39 40 import com.sun.star.beans.PropertyValue; 41 import com.sun.star.container.XNameAccess; 42 import com.sun.star.frame.XController; 43 import com.sun.star.frame.XDesktop; 44 import com.sun.star.frame.XDispatch; 45 import com.sun.star.frame.XDispatchProvider; 46 import com.sun.star.frame.XFrame; 47 import com.sun.star.frame.XModel; 48 import com.sun.star.lang.XInitialization; 49 import com.sun.star.lang.XMultiServiceFactory; 50 import com.sun.star.text.XTextDocument; 51 import com.sun.star.uno.UnoRuntime; 52 import com.sun.star.uno.XInterface; 53 import com.sun.star.util.URL; 54 import lib.StatusException; 55 import util.SOfficeFactory; 56 import com.sun.star.sdb.XDocumentDataSource; 57 import com.sun.star.sdbc.XDataSource; 58 59 public class OQueryDesign extends TestCase { 60 61 private static XDesktop xDesk; 62 private static XFrame xFrame; 63 private final String sDataSourceName = "Bibliography"; 64 private static XConnection xConn; 65 private static XTextDocument xTextDoc; 66 67 68 /** 69 * Creates the Desktop service (<code>com.sun.star.frame.Desktop</code>). 70 */ initialize(TestParameters Param, PrintWriter log)71 protected void initialize(TestParameters Param, PrintWriter log) { 72 xDesk = (XDesktop) UnoRuntime.queryInterface( 73 XDesktop.class, DesktopTools.createDesktop((XMultiServiceFactory)Param.getMSF()) ); 74 } 75 createTestEnvironment(TestParameters Param, PrintWriter log)76 protected synchronized TestEnvironment createTestEnvironment(TestParameters Param, PrintWriter log) { 77 78 log.println( "creating a test environment" ); 79 80 XInterface oObj = null; 81 82 XDispatchProvider aProv = (XDispatchProvider) 83 UnoRuntime.queryInterface(XDispatchProvider.class,xDesk); 84 85 XDispatch getting = null; 86 XMultiServiceFactory xMSF = (XMultiServiceFactory) Param.getMSF(); 87 88 XNameAccess xNameAccess = null; 89 90 // we use the first DataSource 91 XDataSource xDS = null; 92 try { 93 xNameAccess = (XNameAccess) UnoRuntime.queryInterface( 94 XNameAccess.class, 95 xMSF.createInstance("com.sun.star.sdb.DatabaseContext")); 96 } catch (Exception ex) { 97 ex.printStackTrace( log ); 98 throw new StatusException( "Could not get Databasecontext", ex ); 99 } 100 try { 101 xDS = (XDataSource) UnoRuntime.queryInterface( 102 XDataSource.class, xNameAccess.getByName( "Bibliography" )); 103 } catch (NoSuchElementException ex) { 104 ex.printStackTrace( log ); 105 throw new StatusException( "Could not get XDataSource", ex ); 106 } catch (WrappedTargetException ex) { 107 ex.printStackTrace( log ); 108 throw new StatusException( "Could not get XDataSource", ex ); 109 } 110 try { 111 xNameAccess = (XNameAccess) UnoRuntime.queryInterface( 112 XNameAccess.class, 113 xMSF.createInstance("com.sun.star.sdb.DatabaseContext")); 114 } catch (Exception ex) { 115 ex.printStackTrace( log ); 116 throw new StatusException( "Could not get DatabaseConext", ex ); 117 } 118 119 log.println("check XMultiServiceFactory"); 120 121 try { 122 xConn = xDS.getConnection(new String(), new String()); 123 } catch (SQLException ex) { 124 ex.printStackTrace( log ); 125 throw new StatusException( "Could not get XConnection", ex ); 126 } 127 128 log.println( "opening QueryDesign" ); 129 URL the_url = new URL(); 130 the_url.Complete = ".component:DB/QueryDesign"; 131 getting = aProv.queryDispatch(the_url,"Query",12); 132 PropertyValue[] Args = new PropertyValue[2]; 133 PropertyValue param1 = new PropertyValue(); 134 param1.Name = "DataSourceName"; 135 param1.Value = "Bibliography"; 136 Args[0] = param1; 137 PropertyValue param2 = new PropertyValue(); 138 param2.Name = "QueryDesignView"; 139 param2.Value = new Boolean(false); 140 Args[1] = param2; 141 param1.Name = "ActiveConnection"; 142 param1.Value = xConn; 143 Args[1] = param2; 144 getting.dispatch(the_url,Args); 145 146 shortWait(); 147 148 Object oDBC = null; 149 150 try { 151 oDBC = xMSF.createInstance( "com.sun.star.sdb.DatabaseContext" ); 152 } 153 catch( com.sun.star.uno.Exception e ) { 154 throw new StatusException("Could not instantiate DatabaseContext", e) ; 155 } 156 157 Object oDataSource = null; 158 try{ 159 XNameAccess xNA = (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, oDBC); 160 oDataSource = xNA.getByName(sDataSourceName); 161 } catch ( com.sun.star.container.NoSuchElementException e){ 162 throw new StatusException("could not get '" + sDataSourceName + "'" , e) ; 163 } catch ( com.sun.star.lang.WrappedTargetException e){ 164 throw new StatusException("could not get '" + sDataSourceName + "'" , e) ; 165 } 166 XDocumentDataSource xDDS = (XDocumentDataSource) UnoRuntime.queryInterface(XDocumentDataSource.class, oDataSource); 167 // XModel xMod = (XModel) UnoRuntime.queryInterface(XModel.class, xDDS.getDatabaseDocument ()); 168 169 // Frame = xMod.getCurrentController().getFrame(); 170 171 xFrame = DesktopTools.getCurrentFrame(xMSF); 172 173 // get an instance of Frame 174 Object oFrame = null; 175 SOfficeFactory SOF = null; 176 177 SOF = SOfficeFactory.getFactory( xMSF ); 178 try { 179 log.println( "creating a textdocument" ); 180 xTextDoc = SOF.createTextDoc( null ); 181 } catch ( com.sun.star.uno.Exception e ) { 182 e.printStackTrace( log ); 183 throw new StatusException( "Could not create document", e ); 184 } 185 186 XModel xDocMod = (XModel) UnoRuntime.queryInterface(XModel.class, xTextDoc); 187 188 XFrame xTextFrame = xDocMod.getCurrentController().getFrame(); 189 190 Object[] params = new Object[3]; 191 param1 = new PropertyValue(); 192 param1.Name = "DataSourceName"; 193 param1.Value = "Bibliography"; 194 params[0] = param1; 195 param2 = new PropertyValue(); 196 param2.Name = "Frame"; 197 param2.Value = xTextFrame; 198 params[1] = param2; 199 PropertyValue param3 = new PropertyValue(); 200 param3.Name = "QueryDesignView"; 201 param3.Value = new Boolean(true); 202 params[2] = param3; 203 204 205 oObj = xFrame.getController(); 206 207 TestEnvironment tEnv = new TestEnvironment(oObj); 208 209 //Adding ObjRelations for XInitialization 210 tEnv.addObjRelation("XInitialization.args", params); 211 212 //Object[] ExceptionParams = new Object[3]; 213 //ExceptionParams = params; 214 //((PropertyValue) ExceptionParams[1]).Value = Frame; 215 Object[] ExceptionParams = new Object[3]; 216 PropertyValue ExceptionParam1 = new PropertyValue(); 217 ExceptionParam1.Name = "DataSourceName"; 218 ExceptionParam1.Value = "Bibliography2"; 219 ExceptionParams[0] = ExceptionParam1; 220 PropertyValue ExceptionParam2 = new PropertyValue(); 221 ExceptionParam2.Name = "Frame"; 222 ExceptionParam2.Value = null; 223 ExceptionParams[1] = ExceptionParam2; 224 PropertyValue ExceptionParam3 = new PropertyValue(); 225 ExceptionParam3.Name = "QueryDesignView"; 226 ExceptionParam3.Value = new Integer(17); // new Boolean(true); 227 ExceptionParams[2] = ExceptionParam3; 228 229 tEnv.addObjRelation("XInitialization.ExceptionArgs", ExceptionParams); 230 231 tEnv.addObjRelation("Frame", xFrame); 232 233 tEnv.addObjRelation("XInitialization.xIni", getUninitializedObj(Param)); 234 235 log.println("ImplementationName: "+util.utils.getImplName(oObj)); 236 237 return tEnv; 238 239 } // finish method getTestEnvironment 240 getUninitializedObj(TestParameters Param)241 private XInitialization getUninitializedObj(TestParameters Param){ 242 // create an object which is not initialized 243 244 // get a model of a DataSource 245 Object oDBC = null; 246 XMultiServiceFactory xMSF; 247 248 try { 249 xMSF = (XMultiServiceFactory)Param.getMSF(); 250 oDBC = xMSF.createInstance( "com.sun.star.sdb.DatabaseContext" ); 251 } 252 catch( com.sun.star.uno.Exception e ) { 253 throw new StatusException("Could not instantiate DatabaseContext", e) ; 254 } 255 256 Object oDataSource = null; 257 try{ 258 XNameAccess xNA = (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, oDBC); 259 oDataSource = xNA.getByName(sDataSourceName); 260 } catch ( com.sun.star.container.NoSuchElementException e){ 261 throw new StatusException("could not get '" + sDataSourceName + "'" , e) ; 262 } catch ( com.sun.star.lang.WrappedTargetException e){ 263 throw new StatusException("could not get '" + sDataSourceName + "'" , e) ; 264 } 265 266 XDocumentDataSource xDDS = (XDocumentDataSource) UnoRuntime.queryInterface(XDocumentDataSource.class, oDataSource); 267 XModel xMod = (XModel) UnoRuntime.queryInterface(XModel.class, xDDS.getDatabaseDocument ()); 268 269 // get an instance of QueryDesign 270 Object oQueryDesign = null; 271 try{ 272 oQueryDesign = xMSF.createInstance("com.sun.star.sdb.QueryDesign"); 273 }catch( com.sun.star.uno.Exception e ) { 274 throw new StatusException("Could not instantiate QueryDesign", e) ; 275 } 276 277 XController xCont = (XController) UnoRuntime.queryInterface(XController.class, oQueryDesign); 278 279 // marry them all 280 xCont.attachModel(xMod); 281 xMod.connectController(xCont); 282 try{ 283 xMod.setCurrentController(xCont); 284 } catch (com.sun.star.container.NoSuchElementException e){ 285 throw new StatusException("Could not set controller", e) ; 286 } 287 288 //xCont.attachFrame(xFrame); 289 290 return (XInitialization) UnoRuntime.queryInterface(XInitialization.class, oQueryDesign); 291 292 } 293 294 @Override cleanup(TestParameters tParam, PrintWriter log)295 protected void cleanup(TestParameters tParam, PrintWriter log) { 296 try { 297 xConn.close() ; 298 DesktopTools.closeDoc(xFrame); 299 DesktopTools.closeDoc(xTextDoc); 300 } catch (com.sun.star.uno.Exception e) { 301 log.println("Can't close the connection") ; 302 e.printStackTrace(log) ; 303 } catch (com.sun.star.lang.DisposedException e) { 304 log.println("Connection was already closed. It's OK.") ; 305 } 306 307 } 308 309 /** 310 * Sleeps for 0.2 sec. to allow OpenOffice to react on <code> 311 * reset</code> call. 312 */ shortWait()313 private void shortWait() { 314 try { 315 Thread.sleep(5000) ; 316 } catch (InterruptedException e) { 317 System.out.println("While waiting :" + e) ; 318 } 319 } 320 321 } // finish class oDatasourceBrowser 322 323