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 util; 25 26 // access the implementations via names 27 import com.sun.star.uno.XInterface; 28 import com.sun.star.uno.UnoRuntime; 29 import com.sun.star.lang.XComponent; 30 import com.sun.star.drawing.XControlShape; 31 import com.sun.star.drawing.XDrawPage; 32 import com.sun.star.lang.XMultiServiceFactory; 33 import com.sun.star.awt.Size; 34 import com.sun.star.awt.Point; 35 import com.sun.star.awt.XControlModel; 36 import com.sun.star.container.XNameContainer; 37 import com.sun.star.container.XIndexContainer; 38 import com.sun.star.form.XFormsSupplier; 39 import com.sun.star.form.XForm; 40 import com.sun.star.form.XLoadable; 41 import com.sun.star.text.XTextDocument; 42 import com.sun.star.beans.XPropertySet; 43 import com.sun.star.uno.AnyConverter; 44 import com.sun.star.uno.Type; 45 46 /** 47 * contains helper methods forms 48 */ 49 50 public class FormTools { 51 52 53 /** 54 * creates a XControlShape 55 * 56 * @param oDoc the document 57 * @param height the height of the shape 58 * @param width the width of the shape 59 * @param x the x-position of the shape 60 * @param y the y-position of the shape 61 * @param kind the kind of the shape 62 * @return the created XControlShape 63 */ createControlShape( XComponent oDoc, int height, int width, int x, int y, String kind )64 public static XControlShape createControlShape( XComponent oDoc, int height, 65 int width, int x, int y, String kind ) { 66 67 Size size = new Size(); 68 Point position = new Point(); 69 XControlShape oCShape = null; 70 XControlModel aControl = null; 71 72 //get MSF 73 XMultiServiceFactory oDocMSF = (XMultiServiceFactory) 74 UnoRuntime.queryInterface( XMultiServiceFactory.class, oDoc ); 75 76 try{ 77 Object oInt = oDocMSF.createInstance("com.sun.star.drawing.ControlShape"); 78 Object aCon = oDocMSF.createInstance("com.sun.star.form.component."+kind); 79 XPropertySet model_props = (XPropertySet) 80 UnoRuntime.queryInterface(XPropertySet.class,aCon); 81 model_props.setPropertyValue("DefaultControl","com.sun.star.form.control."+kind); 82 aControl = (XControlModel) UnoRuntime.queryInterface( XControlModel.class, aCon ); 83 oCShape = (XControlShape) UnoRuntime.queryInterface( XControlShape.class, oInt ); 84 size.Height = height; 85 size.Width = width; 86 position.X = x; 87 position.Y = y; 88 oCShape.setSize(size); 89 oCShape.setPosition(position); 90 } catch ( com.sun.star.uno.Exception e ) { 91 // Some exception occures.FAILED 92 System.out.println( "Couldn't create instance "+ e ); 93 } 94 95 oCShape.setControl(aControl); 96 97 return oCShape; 98 } // finish createControlShape 99 createUnoControlShape( XComponent oDoc, int height, int width, int x, int y, String kind, String defControl )100 public static XControlShape createUnoControlShape( XComponent oDoc, int height, 101 int width, int x, int y, String kind, String defControl ) { 102 103 Size size = new Size(); 104 Point position = new Point(); 105 XControlShape oCShape = null; 106 XControlModel aControl = null; 107 108 //get MSF 109 XMultiServiceFactory oDocMSF = (XMultiServiceFactory) UnoRuntime.queryInterface( XMultiServiceFactory.class, oDoc ); 110 111 try{ 112 Object oInt = oDocMSF.createInstance("com.sun.star.drawing.ControlShape"); 113 Object aCon = oDocMSF.createInstance("com.sun.star.form.component."+kind); 114 XPropertySet model_props = (XPropertySet) 115 UnoRuntime.queryInterface(XPropertySet.class,aCon); 116 model_props.setPropertyValue("DefaultControl","com.sun.star.awt."+defControl); 117 aControl = (XControlModel) UnoRuntime.queryInterface( XControlModel.class, aCon ); 118 oCShape = (XControlShape) UnoRuntime.queryInterface( XControlShape.class, oInt ); 119 size.Height = height; 120 size.Width = width; 121 position.X = x; 122 position.Y = y; 123 oCShape.setSize(size); 124 oCShape.setPosition(position); 125 126 127 } catch ( com.sun.star.uno.Exception e ) { 128 // Some exception occures.FAILED 129 System.out.println( "Couldn't create instance "+ e ); 130 } 131 132 oCShape.setControl(aControl); 133 134 return oCShape; 135 } // finish createControlShape 136 createControlShapeWithDefaultControl( XComponent oDoc, int height, int width, int x, int y, String kind )137 public static XControlShape createControlShapeWithDefaultControl( XComponent oDoc, int height, 138 int width, int x, int y, String kind ) { 139 140 Size size = new Size(); 141 Point position = new Point(); 142 XControlShape oCShape = null; 143 XControlModel aControl = null; 144 145 //get MSF 146 XMultiServiceFactory oDocMSF = (XMultiServiceFactory) UnoRuntime.queryInterface( XMultiServiceFactory.class, oDoc ); 147 148 try{ 149 Object oInt = oDocMSF.createInstance("com.sun.star.drawing.ControlShape"); 150 Object aCon = oDocMSF.createInstance("com.sun.star.form.component."+kind); 151 152 aControl = (XControlModel) UnoRuntime.queryInterface( XControlModel.class, aCon ); 153 oCShape = (XControlShape) UnoRuntime.queryInterface( XControlShape.class, oInt ); 154 size.Height = height; 155 size.Width = width; 156 position.X = x; 157 position.Y = y; 158 oCShape.setSize(size); 159 oCShape.setPosition(position); 160 161 162 } catch ( com.sun.star.uno.Exception e ) { 163 // Some exception occures.FAILED 164 System.out.println( "Couldn't create instance "+ e ); 165 } 166 167 oCShape.setControl(aControl); 168 169 return oCShape; 170 } // finish createControlShape 171 createControl( XComponent oDoc, String kind )172 public static XInterface createControl( XComponent oDoc, String kind ) { 173 174 XInterface oControl = null; 175 176 XMultiServiceFactory oDocMSF = (XMultiServiceFactory) 177 UnoRuntime.queryInterface( XMultiServiceFactory.class, oDoc ); 178 179 try{ 180 oControl = (XInterface) oDocMSF.createInstance( 181 "com.sun.star.form.component."+kind); 182 } catch ( Exception e ) { 183 // Some exception occures.FAILED 184 System.out.println( "Couldn't create instance "+ kind + ": "+ e ); 185 } 186 return oControl; 187 } // finish createControl 188 getForms( XDrawPage oDP )189 public static XNameContainer getForms ( XDrawPage oDP ) 190 { 191 XFormsSupplier oFS = (XFormsSupplier) UnoRuntime.queryInterface( 192 XFormsSupplier.class,oDP); 193 return oFS.getForms(); 194 } //finish getForms 195 getIndexedForms( XDrawPage oDP )196 public static XIndexContainer getIndexedForms ( XDrawPage oDP ) 197 { 198 XFormsSupplier oFS = (XFormsSupplier) UnoRuntime.queryInterface( 199 XFormsSupplier.class,oDP); 200 return (XIndexContainer)UnoRuntime.queryInterface( XIndexContainer.class, 201 oFS.getForms() ); 202 } //finish getIndexedForms 203 insertForm( XComponent aDoc, XNameContainer Forms, String aName )204 public static void insertForm ( XComponent aDoc, XNameContainer Forms, 205 String aName ) { 206 try { 207 XInterface oControl = createControl(aDoc, "Form"); 208 XForm oForm = (XForm) UnoRuntime.queryInterface(XForm.class, oControl); 209 Forms.insertByName(aName,oForm); 210 } catch ( Exception e ) { 211 throw new IllegalArgumentException( "Couldn't insert Form" ); 212 } 213 } 214 insertControlShape( XComponent oDoc, int height, int width, int x, int y, String kind )215 public static XControlShape insertControlShape( XComponent oDoc, int height, 216 int width, int x, int y, String kind ) { 217 218 XControlShape aShape = createControlShape(oDoc,height,width,x,y,kind); 219 XDrawPage oDP = DrawTools.getDrawPage(oDoc,0); 220 DrawTools.getShapes(oDP).add(aShape); 221 return aShape; 222 } 223 bindForm( XTextDocument aDoc )224 public static XLoadable bindForm( XTextDocument aDoc ) { 225 XLoadable formLoader = null; 226 227 try { 228 Object aForm = FormTools.getIndexedForms(WriterTools.getDrawPage(aDoc)).getByIndex(0); 229 XForm the_form = null; 230 try { 231 the_form = (XForm) AnyConverter.toObject(new Type(XForm.class), aForm); 232 } catch (com.sun.star.lang.IllegalArgumentException iae) { 233 System.out.println("### Couldn't convert Any"); 234 } 235 XPropertySet formProps = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, the_form); 236 formProps.setPropertyValue("DataSourceName","Bibliography"); 237 formProps.setPropertyValue("Command","biblio"); 238 formProps.setPropertyValue("CommandType",new Integer(com.sun.star.sdb.CommandType.TABLE)); 239 formLoader = (XLoadable) UnoRuntime.queryInterface(XLoadable.class, the_form); 240 } 241 catch (Exception ex) { 242 System.out.println("Exception: "+ex); 243 ex.printStackTrace(System.out); 244 } 245 246 return formLoader; 247 } 248 249 /** 250 * Binds <code>'Standard'</code> form of <code>aDoc</code> Writer document 251 * to the <code>tableName</code> table of <code>sourceName</code> 252 * Data Source. 253 * @param aDoc Writer document where DB controls are added. 254 * @param sourceName The name of DataSource in the <code>DatabaseContext</code>. 255 * @param tableName The name of the table to which controls are bound. 256 * @return <code>com.sun.star.form.component.DatabaseForm</code> service 257 * implementation which is the bound form inside the document. 258 */ bindForm( XTextDocument aDoc, String sourceName, String tableName )259 public static XLoadable bindForm( XTextDocument aDoc, String sourceName, String tableName ) 260 throws com.sun.star.uno.Exception { 261 262 XForm the_form = (XForm) AnyConverter.toObject(new Type(XForm.class), 263 FormTools.getIndexedForms(WriterTools.getDrawPage(aDoc)).getByIndex(0)); 264 XPropertySet formProps = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, the_form); 265 formProps.setPropertyValue("DataSourceName",sourceName); 266 formProps.setPropertyValue("Command",tableName); 267 formProps.setPropertyValue("CommandType",new Integer(com.sun.star.sdb.CommandType.TABLE)); 268 269 return (XLoadable) UnoRuntime.queryInterface(XLoadable.class, the_form); 270 } 271 bindForm( XTextDocument aDoc, String formName )272 public static XLoadable bindForm( XTextDocument aDoc, String formName ) { 273 XLoadable formLoader = null; 274 275 try { 276 XForm the_form = (XForm) FormTools.getForms(WriterTools.getDrawPage(aDoc)).getByName(formName); 277 XPropertySet formProps = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, the_form); 278 formProps.setPropertyValue("DataSourceName","Bibliography"); 279 formProps.setPropertyValue("Command","biblio"); 280 formProps.setPropertyValue("CommandType",new Integer(com.sun.star.sdb.CommandType.TABLE)); 281 formLoader = (XLoadable) UnoRuntime.queryInterface(XLoadable.class, the_form); 282 } 283 catch (Exception ex) { 284 System.out.println("Exception: "+ex); 285 ex.printStackTrace(System.out); 286 } 287 288 return formLoader; 289 } 290 291 /** 292 * Binds the form with the name specified of <code>aDoc</code> Writer document 293 * to the <code>tableName</code> table of <code>sourceName</code> 294 * Data Source. 295 * @param aDoc Writer document where DB controls are added. 296 * @param formName The name of the form to be bound. 297 * @param sourceName The name of DataSource in the <code>DatabaseContext</code>. 298 * @param tableName The name of the table to which controls are bound. 299 * @return <code>com.sun.star.form.component.DatabaseForm</code> service 300 * implementation which is the bound form inside the document. 301 */ bindForm( XTextDocument aDoc, String formName, String sourceName, String tableName)302 public static XLoadable bindForm( XTextDocument aDoc, String formName, String sourceName, 303 String tableName) throws com.sun.star.uno.Exception { 304 305 XForm the_form = (XForm) AnyConverter.toObject(new Type(XForm.class), 306 FormTools.getForms(WriterTools.getDrawPage(aDoc)).getByName(formName)); 307 XPropertySet formProps = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, the_form); 308 formProps.setPropertyValue("DataSourceName",sourceName); 309 formProps.setPropertyValue("Command",tableName); 310 formProps.setPropertyValue("CommandType",new Integer(com.sun.star.sdb.CommandType.TABLE)); 311 312 return (XLoadable) UnoRuntime.queryInterface(XLoadable.class, the_form); 313 } 314 switchDesignOf(XMultiServiceFactory xMSF, XTextDocument aDoc)315 public static void switchDesignOf(XMultiServiceFactory xMSF, XTextDocument aDoc) { 316 try { 317 com.sun.star.frame.XController aController = aDoc.getCurrentController(); 318 com.sun.star.frame.XFrame aFrame = aController.getFrame(); 319 com.sun.star.frame.XDispatchProvider aDispProv = (com.sun.star.frame.XDispatchProvider) 320 UnoRuntime.queryInterface(com.sun.star.frame.XDispatchProvider.class,aFrame); 321 com.sun.star.util.URL aURL = new com.sun.star.util.URL(); 322 aURL.Complete = ".uno:SwitchControlDesignMode"; 323 324 Object instance = xMSF.createInstance("com.sun.star.util.URLTransformer"); 325 com.sun.star.util.XURLTransformer atrans = 326 (com.sun.star.util.XURLTransformer)UnoRuntime.queryInterface( 327 com.sun.star.util.XURLTransformer.class,instance); 328 com.sun.star.util.URL[] aURLA = new com.sun.star.util.URL[1]; 329 aURLA[0] = aURL; 330 atrans.parseStrict(aURLA); 331 aURL = aURLA[0]; 332 333 com.sun.star.frame.XDispatch aDisp = (com.sun.star.frame.XDispatch)aDispProv.queryDispatch(aURL, "", 334 com.sun.star.frame.FrameSearchFlag.SELF | 335 com.sun.star.frame.FrameSearchFlag.CHILDREN); 336 337 com.sun.star.beans.PropertyValue[] noArgs = new com.sun.star.beans.PropertyValue[0]; 338 aDisp.dispatch(aURL, noArgs); 339 } catch (Exception e) { 340 System.out.println("******* Mist"); 341 e.printStackTrace(); 342 } 343 } 344 345 } 346