merged tag ooo/DEV300_m102
[LibreOffice.git] / qadevOOo / runner / util / FormTools.java
blob46515043f67707f6c217b2b49dcfff41a817bc51
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2000, 2010 Oracle and/or its affiliates.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * This file is part of OpenOffice.org.
11 * OpenOffice.org is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License version 3
13 * only, as published by the Free Software Foundation.
15 * OpenOffice.org is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU Lesser General Public License version 3 for more details
19 * (a copy is included in the LICENSE file that accompanied this code).
21 * You should have received a copy of the GNU Lesser General Public License
22 * version 3 along with OpenOffice.org. If not, see
23 * <http://www.openoffice.org/license.html>
24 * for a copy of the LGPLv3 License.
26 ************************************************************************/
28 package util;
30 // access the implementations via names
31 import com.sun.star.uno.XInterface;
32 import com.sun.star.uno.UnoRuntime;
33 import com.sun.star.lang.XComponent;
34 import com.sun.star.drawing.XControlShape;
35 import com.sun.star.drawing.XDrawPage;
36 import com.sun.star.lang.XMultiServiceFactory;
37 import com.sun.star.awt.Size;
38 import com.sun.star.awt.Point;
39 import com.sun.star.awt.XControlModel;
40 import com.sun.star.container.XNameContainer;
41 import com.sun.star.container.XIndexContainer;
42 import com.sun.star.form.XFormsSupplier;
43 import com.sun.star.form.XForm;
44 import com.sun.star.form.XLoadable;
45 import com.sun.star.text.XTextDocument;
46 import com.sun.star.beans.XPropertySet;
47 import com.sun.star.uno.AnyConverter;
48 import com.sun.star.uno.Type;
50 /**
51 * contains helper methods forms
54 public class FormTools {
57 /**
58 * creates a XControlShape
60 * @param oDoc the document
61 * @param height the height of the shape
62 * @param width the width of the shape
63 * @param x the x-position of the shape
64 * @param y the y-position of the shape
65 * @param kind the kind of the shape
66 * @return the created XControlShape
68 public static XControlShape createControlShape( XComponent oDoc, int height,
69 int width, int x, int y, String kind ) {
71 Size size = new Size();
72 Point position = new Point();
73 XControlShape oCShape = null;
74 XControlModel aControl = null;
76 //get MSF
77 XMultiServiceFactory oDocMSF = (XMultiServiceFactory)
78 UnoRuntime.queryInterface( XMultiServiceFactory.class, oDoc );
80 try{
81 Object oInt = oDocMSF.createInstance("com.sun.star.drawing.ControlShape");
82 Object aCon = oDocMSF.createInstance("com.sun.star.form.component."+kind);
83 XPropertySet model_props = (XPropertySet)
84 UnoRuntime.queryInterface(XPropertySet.class,aCon);
85 model_props.setPropertyValue("DefaultControl","com.sun.star.form.control."+kind);
86 aControl = (XControlModel) UnoRuntime.queryInterface( XControlModel.class, aCon );
87 oCShape = (XControlShape) UnoRuntime.queryInterface( XControlShape.class, oInt );
88 size.Height = height;
89 size.Width = width;
90 position.X = x;
91 position.Y = y;
92 oCShape.setSize(size);
93 oCShape.setPosition(position);
94 } catch ( com.sun.star.uno.Exception e ) {
95 // Some exception occures.FAILED
96 System.out.println( "Couldn't create instance "+ e );
99 oCShape.setControl(aControl);
101 return oCShape;
102 } // finish createControlShape
104 public static XControlShape createUnoControlShape( XComponent oDoc, int height,
105 int width, int x, int y, String kind, String defControl ) {
107 Size size = new Size();
108 Point position = new Point();
109 XControlShape oCShape = null;
110 XControlModel aControl = null;
112 //get MSF
113 XMultiServiceFactory oDocMSF = (XMultiServiceFactory) UnoRuntime.queryInterface( XMultiServiceFactory.class, oDoc );
115 try{
116 Object oInt = oDocMSF.createInstance("com.sun.star.drawing.ControlShape");
117 Object aCon = oDocMSF.createInstance("com.sun.star.form.component."+kind);
118 XPropertySet model_props = (XPropertySet)
119 UnoRuntime.queryInterface(XPropertySet.class,aCon);
120 model_props.setPropertyValue("DefaultControl","com.sun.star.awt."+defControl);
121 aControl = (XControlModel) UnoRuntime.queryInterface( XControlModel.class, aCon );
122 oCShape = (XControlShape) UnoRuntime.queryInterface( XControlShape.class, oInt );
123 size.Height = height;
124 size.Width = width;
125 position.X = x;
126 position.Y = y;
127 oCShape.setSize(size);
128 oCShape.setPosition(position);
131 } catch ( com.sun.star.uno.Exception e ) {
132 // Some exception occures.FAILED
133 System.out.println( "Couldn't create instance "+ e );
136 oCShape.setControl(aControl);
138 return oCShape;
139 } // finish createControlShape
141 public static XControlShape createControlShapeWithDefaultControl( XComponent oDoc, int height,
142 int width, int x, int y, String kind ) {
144 Size size = new Size();
145 Point position = new Point();
146 XControlShape oCShape = null;
147 XControlModel aControl = null;
149 //get MSF
150 XMultiServiceFactory oDocMSF = (XMultiServiceFactory) UnoRuntime.queryInterface( XMultiServiceFactory.class, oDoc );
152 try{
153 Object oInt = oDocMSF.createInstance("com.sun.star.drawing.ControlShape");
154 Object aCon = oDocMSF.createInstance("com.sun.star.form.component."+kind);
156 aControl = (XControlModel) UnoRuntime.queryInterface( XControlModel.class, aCon );
157 oCShape = (XControlShape) UnoRuntime.queryInterface( XControlShape.class, oInt );
158 size.Height = height;
159 size.Width = width;
160 position.X = x;
161 position.Y = y;
162 oCShape.setSize(size);
163 oCShape.setPosition(position);
166 } catch ( com.sun.star.uno.Exception e ) {
167 // Some exception occures.FAILED
168 System.out.println( "Couldn't create instance "+ e );
171 oCShape.setControl(aControl);
173 return oCShape;
174 } // finish createControlShape
176 public static XInterface createControl( XComponent oDoc, String kind ) {
178 XInterface oControl = null;
180 XMultiServiceFactory oDocMSF = (XMultiServiceFactory)
181 UnoRuntime.queryInterface( XMultiServiceFactory.class, oDoc );
183 try{
184 oControl = (XInterface) oDocMSF.createInstance(
185 "com.sun.star.form.component."+kind);
186 } catch ( Exception e ) {
187 // Some exception occures.FAILED
188 System.out.println( "Couldn't create instance "+ kind + ": "+ e );
190 return oControl;
191 } // finish createControl
193 public static XNameContainer getForms ( XDrawPage oDP )
195 XFormsSupplier oFS = (XFormsSupplier) UnoRuntime.queryInterface(
196 XFormsSupplier.class,oDP);
197 return oFS.getForms();
198 } //finish getForms
200 public static XIndexContainer getIndexedForms ( XDrawPage oDP )
202 XFormsSupplier oFS = (XFormsSupplier) UnoRuntime.queryInterface(
203 XFormsSupplier.class,oDP);
204 return (XIndexContainer)UnoRuntime.queryInterface( XIndexContainer.class,
205 oFS.getForms() );
206 } //finish getIndexedForms
208 public static void insertForm ( XComponent aDoc, XNameContainer Forms,
209 String aName ) {
210 try {
211 XInterface oControl = createControl(aDoc, "Form");
212 XForm oForm = (XForm) UnoRuntime.queryInterface(XForm.class, oControl);
213 Forms.insertByName(aName,oForm);
214 } catch ( Exception e ) {
215 throw new IllegalArgumentException( "Couldn't insert Form" );
219 public static XControlShape insertControlShape( XComponent oDoc, int height,
220 int width, int x, int y, String kind ) {
222 XControlShape aShape = createControlShape(oDoc,height,width,x,y,kind);
223 XDrawPage oDP = DrawTools.getDrawPage(oDoc,0);
224 DrawTools.getShapes(oDP).add(aShape);
225 return aShape;
228 public static XLoadable bindForm( XTextDocument aDoc ) {
229 XLoadable formLoader = null;
231 try {
232 Object aForm = FormTools.getIndexedForms(WriterTools.getDrawPage(aDoc)).getByIndex(0);
233 XForm the_form = null;
234 try {
235 the_form = (XForm) AnyConverter.toObject(new Type(XForm.class), aForm);
236 } catch (com.sun.star.lang.IllegalArgumentException iae) {
237 System.out.println("### Couldn't convert Any");
239 XPropertySet formProps = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, the_form);
240 formProps.setPropertyValue("DataSourceName","Bibliography");
241 formProps.setPropertyValue("Command","biblio");
242 formProps.setPropertyValue("CommandType",new Integer(com.sun.star.sdb.CommandType.TABLE));
243 formLoader = (XLoadable) UnoRuntime.queryInterface(XLoadable.class, the_form);
245 catch (Exception ex) {
246 System.out.println("Exception: "+ex);
247 ex.printStackTrace(System.out);
250 return formLoader;
254 * Binds <code>'Standard'</code> form of <code>aDoc</code> Writer document
255 * to the <code>tableName</code> table of <code>sourceName</code>
256 * Data Source.
257 * @param aDoc Writer document where DB controls are added.
258 * @param sourceName The name of DataSource in the <code>DatabaseContext</code>.
259 * @param tableName The name of the table to which controls are bound.
260 * @return <code>com.sun.star.form.component.DatabaseForm</code> service
261 * implementation which is the bound form inside the document.
263 public static XLoadable bindForm( XTextDocument aDoc, String sourceName, String tableName )
264 throws com.sun.star.uno.Exception {
266 XForm the_form = (XForm) AnyConverter.toObject(new Type(XForm.class),
267 FormTools.getIndexedForms(WriterTools.getDrawPage(aDoc)).getByIndex(0));
268 XPropertySet formProps = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, the_form);
269 formProps.setPropertyValue("DataSourceName",sourceName);
270 formProps.setPropertyValue("Command",tableName);
271 formProps.setPropertyValue("CommandType",new Integer(com.sun.star.sdb.CommandType.TABLE));
273 return (XLoadable) UnoRuntime.queryInterface(XLoadable.class, the_form);
276 public static XLoadable bindForm( XTextDocument aDoc, String formName ) {
277 XLoadable formLoader = null;
279 try {
280 XForm the_form = (XForm) FormTools.getForms(WriterTools.getDrawPage(aDoc)).getByName(formName);
281 XPropertySet formProps = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, the_form);
282 formProps.setPropertyValue("DataSourceName","Bibliography");
283 formProps.setPropertyValue("Command","biblio");
284 formProps.setPropertyValue("CommandType",new Integer(com.sun.star.sdb.CommandType.TABLE));
285 formLoader = (XLoadable) UnoRuntime.queryInterface(XLoadable.class, the_form);
287 catch (Exception ex) {
288 System.out.println("Exception: "+ex);
289 ex.printStackTrace(System.out);
292 return formLoader;
296 * Binds the form with the name specified of <code>aDoc</code> Writer document
297 * to the <code>tableName</code> table of <code>sourceName</code>
298 * Data Source.
299 * @param aDoc Writer document where DB controls are added.
300 * @param formName The name of the form to be bound.
301 * @param sourceName The name of DataSource in the <code>DatabaseContext</code>.
302 * @param tableName The name of the table to which controls are bound.
303 * @return <code>com.sun.star.form.component.DatabaseForm</code> service
304 * implementation which is the bound form inside the document.
306 public static XLoadable bindForm( XTextDocument aDoc, String formName, String sourceName,
307 String tableName) throws com.sun.star.uno.Exception {
309 XForm the_form = (XForm) AnyConverter.toObject(new Type(XForm.class),
310 FormTools.getForms(WriterTools.getDrawPage(aDoc)).getByName(formName));
311 XPropertySet formProps = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, the_form);
312 formProps.setPropertyValue("DataSourceName",sourceName);
313 formProps.setPropertyValue("Command",tableName);
314 formProps.setPropertyValue("CommandType",new Integer(com.sun.star.sdb.CommandType.TABLE));
316 return (XLoadable) UnoRuntime.queryInterface(XLoadable.class, the_form);
319 public static void switchDesignOf(XMultiServiceFactory xMSF, XTextDocument aDoc) {
320 try {
321 com.sun.star.frame.XController aController = aDoc.getCurrentController();
322 com.sun.star.frame.XFrame aFrame = aController.getFrame();
323 com.sun.star.frame.XDispatchProvider aDispProv = (com.sun.star.frame.XDispatchProvider)
324 UnoRuntime.queryInterface(com.sun.star.frame.XDispatchProvider.class,aFrame);
325 com.sun.star.util.URL aURL = new com.sun.star.util.URL();
326 aURL.Complete = ".uno:SwitchControlDesignMode";
328 Object instance = xMSF.createInstance("com.sun.star.util.URLTransformer");
329 com.sun.star.util.XURLTransformer atrans =
330 (com.sun.star.util.XURLTransformer)UnoRuntime.queryInterface(
331 com.sun.star.util.XURLTransformer.class,instance);
332 com.sun.star.util.URL[] aURLA = new com.sun.star.util.URL[1];
333 aURLA[0] = aURL;
334 atrans.parseStrict(aURLA);
335 aURL = aURLA[0];
337 com.sun.star.frame.XDispatch aDisp = (com.sun.star.frame.XDispatch)aDispProv.queryDispatch(aURL, "",
338 com.sun.star.frame.FrameSearchFlag.SELF |
339 com.sun.star.frame.FrameSearchFlag.CHILDREN);
341 com.sun.star.beans.PropertyValue[] noArgs = new com.sun.star.beans.PropertyValue[0];
342 aDisp.dispatch(aURL, noArgs);
343 } catch (Exception e) {
344 System.out.println("******* Mist");
345 e.printStackTrace();