/* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ package mod._dbaccess; import java.io.PrintWriter; import lib.TestCase; import lib.TestEnvironment; import lib.TestParameters; import util.DesktopTools; import util.FormTools; import util.SOfficeFactory; import util.WriterTools; import com.sun.star.awt.XControl; import com.sun.star.awt.XControlModel; import com.sun.star.awt.XWindow; import com.sun.star.beans.PropertyValue; import com.sun.star.drawing.XControlShape; import com.sun.star.frame.XController; import com.sun.star.frame.XDesktop; import com.sun.star.frame.XDispatch; import com.sun.star.frame.XDispatchProvider; import com.sun.star.frame.XFrame; import com.sun.star.frame.XModel; import com.sun.star.lang.XInitialization; import com.sun.star.text.XTextDocument; import com.sun.star.uno.UnoRuntime; import com.sun.star.uno.XInterface; import com.sun.star.util.URL; import com.sun.star.util.XCloseable; import com.sun.star.view.XControlAccess; /** * Test for object which is represented by service * com.sun.star.sdb.DataSourceBrowser.

* Object implements the following interfaces : *

* This object test is NOT designed to be run in several * threads concurrently. * * @see com.sun.star.container.XChild * @see com.sun.star.lang.XInitialization * @see com.sun.star.util.XModifyBroadcaster * @see com.sun.star.awt.XTabController * @see com.sun.star.form.XFormController * @see com.sun.star.container.XElementAccess * @see com.sun.star.frame.XDispatchProvider * @see com.sun.star.container.XEnumerationAccess * @see com.sun.star.frame.XController * @see com.sun.star.lang.XComponent * @see ifc.container._XChild * @see ifc.lang._XInitialization * @see ifc.util._XModifyBroadcaster * @see ifc.awt._XTabController * @see ifc.form._XFormController * @see ifc.container._XElementAccess * @see ifc.frame._XDispatchProvider * @see ifc.container._XEnumerationAccess * @see ifc.frame._XController * @see ifc.lang._XComponent */ public class ODatasourceBrowser extends TestCase { XDesktop xDesktop; XTextDocument xTextDoc; /** * Creates the Desktop service (com.sun.star.frame.Desktop). */ @Override protected void initialize(TestParameters Param, PrintWriter log) { xDesktop = DesktopTools.createDesktop(Param.getMSF()); System.setProperty("hideMe", "false"); } /** * Disposes the document, if exists, created in * createTestEnvironment method. */ @Override protected void cleanup(TestParameters Param, PrintWriter log) { log.println("disposing xTextDoc"); System.setProperty("hideMe", "true"); if (xTextDoc != null) { log.println(" disposing xTextDoc "); try { XCloseable closer = UnoRuntime.queryInterface( XCloseable.class, xTextDoc); closer.close(true); } catch (com.sun.star.util.CloseVetoException e) { log.println("couldn't close document"); } catch (com.sun.star.lang.DisposedException e) { log.println("couldn't close document"); } } } /** * Creating a TestEnvironment for the interfaces to be tested. * * Creates a new text document disposing the old one if it was * created. Using Desktop service get the frame * of the document and with its help creates * DataSourceBrowser dispatching the URL * '.component:DB/DataSourceBrowser'. The * component for testing is the controller of the * Browser and it's got by searching its * frame with the help of TextDocument frame, and obtaining * the frame's controller.

* * Note: after creating the text document a short * pause is needed to give a possibility to a frame to be * created for the document. Else * Desktop.getCurrentFrame() method can return * null value.

* * Object relations created : *

* * @see com.sun.star.frame.Desktop * @see com.sun.star.frame.XModel * @see com.sun.star.frame.XFrame * @see com.sun.star.frame.XController * @see com.sun.star.frame.XDispatchProvider */ @Override protected TestEnvironment createTestEnvironment(TestParameters Param, PrintWriter log) throws Exception { log.println("creating a test environment"); if (xTextDoc != null) { log.println(" disposing xTextDoc "); try { XCloseable closer = UnoRuntime.queryInterface( XCloseable.class, xTextDoc); closer.close(true); } catch (com.sun.star.util.CloseVetoException e) { log.println("couldn't close document"); } catch (com.sun.star.lang.DisposedException e) { log.println("couldn't close document"); } } // get a soffice factory object SOfficeFactory SOF = SOfficeFactory.getFactory(Param.getMSF()); log.println("creating a text document"); xTextDoc = SOF.createTextDoc(null); util.utils.waitForEventIdle(Param.getMSF()); XModel aModel1 = UnoRuntime.queryInterface(XModel.class, xTextDoc); XController secondController = aModel1.getCurrentController(); XFrame the_frame1 = xDesktop.getCurrentFrame(); if (the_frame1 == null) { log.println("Current frame was not found !!!"); } XDispatchProvider aProv = UnoRuntime.queryInterface( XDispatchProvider.class, the_frame1); XDispatch getting = null; log.println("opening DatasourceBrowser"); URL the_url = new URL(); the_url.Complete = ".component:DB/DataSourceBrowser"; getting = aProv.queryDispatch(the_url, "_beamer", 12); PropertyValue[] noArgs = new PropertyValue[0]; getting.dispatch(the_url, noArgs); XFrame the_frame2 = the_frame1.findFrame("_beamer", 4); the_frame2.setName("DatasourceBrowser"); XInterface oObj = the_frame2.getController(); Object[] params = new Object[3]; PropertyValue param1 = new PropertyValue(); param1.Name = "DataSourceName"; param1.Value = "Bibliography"; params[0] = param1; PropertyValue param2 = new PropertyValue(); param2.Name = "CommandType"; param2.Value = Integer.valueOf(com.sun.star.sdb.CommandType.TABLE); params[1] = param2; PropertyValue param3 = new PropertyValue(); param3.Name = "Command"; param3.Value = "biblio"; params[2] = param3; XInitialization xInit = UnoRuntime.queryInterface( XInitialization.class, oObj); xInit.initialize(params); util.utils.waitForEventIdle(Param.getMSF()); XControlShape aShape = FormTools.createControlShape(xTextDoc, 3000, 4500, 15000, 10000, "CommandButton"); WriterTools.getDrawPage(xTextDoc).add(aShape); XControlModel shapeModel = aShape.getControl(); XControlAccess xCtrlAccess = UnoRuntime.queryInterface( XControlAccess.class, secondController); XControl xCtrl = null; try { xCtrl = xCtrlAccess.getControl(shapeModel); } catch (com.sun.star.uno.Exception e) { // Some exception occurs.FAILED e.printStackTrace(log); } XWindow docWindow = UnoRuntime.queryInterface(XWindow.class, xCtrl); log.println("creating a new environment for ODatasourceBrowser object"); TestEnvironment tEnv = new TestEnvironment(oObj); //Adding ObjRelations for XInitialization tEnv.addObjRelation("XInitialization.args", params); //Adding ObjRelations for XController tEnv.addObjRelation("Frame", the_frame1); tEnv.addObjRelation("SecondModel", aModel1); tEnv.addObjRelation("otherWindow", docWindow); tEnv.addObjRelation("SecondController", secondController); tEnv.addObjRelation("HasViewData", Boolean.FALSE); //Adding relation for XDispatchProvider tEnv.addObjRelation("XDispatchProvider.URL", ".uno:DataSourceBrowser/FormLetter"); return tEnv; } // finish method getTestEnvironment } // finish class oDatasourceBrowser