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