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 ************************************************************************/
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
;
51 * contains helper methods forms
54 public class FormTools
{
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;
77 XMultiServiceFactory oDocMSF
= (XMultiServiceFactory
)
78 UnoRuntime
.queryInterface( XMultiServiceFactory
.class, oDoc
);
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
);
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
);
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;
113 XMultiServiceFactory oDocMSF
= (XMultiServiceFactory
) UnoRuntime
.queryInterface( XMultiServiceFactory
.class, oDoc
);
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
;
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
);
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;
150 XMultiServiceFactory oDocMSF
= (XMultiServiceFactory
) UnoRuntime
.queryInterface( XMultiServiceFactory
.class, oDoc
);
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
;
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
);
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
);
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
);
191 } // finish createControl
193 public static XNameContainer
getForms ( XDrawPage oDP
)
195 XFormsSupplier oFS
= (XFormsSupplier
) UnoRuntime
.queryInterface(
196 XFormsSupplier
.class,oDP
);
197 return oFS
.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,
206 } //finish getIndexedForms
208 public static void insertForm ( XComponent aDoc
, XNameContainer Forms
,
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
);
228 public static XLoadable
bindForm( XTextDocument aDoc
) {
229 XLoadable formLoader
= null;
232 Object aForm
= FormTools
.getIndexedForms(WriterTools
.getDrawPage(aDoc
)).getByIndex(0);
233 XForm the_form
= null;
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
);
254 * Binds <code>'Standard'</code> form of <code>aDoc</code> Writer document
255 * to the <code>tableName</code> table of <code>sourceName</code>
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;
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
);
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>
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
) {
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];
334 atrans
.parseStrict(aURLA
);
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");