ConfigExamples.java (34dd1e25) | ConfigExamples.java (002e2b2b) |
---|---|
1/************************************************************** | 1/************************************************************** |
2 * | 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 | 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 * | 10 * |
11 * http://www.apache.org/licenses/LICENSE-2.0 | 11 * http://www.apache.org/licenses/LICENSE-2.0 |
12 * | 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. | 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 * | 19 * |
20 *************************************************************/ 21 22 23 24// Import everything we use 25 26import com.sun.star.beans.XPropertySet; 27import com.sun.star.beans.XMultiPropertySet; --- 40 unchanged lines hidden (view full) --- 68 69 o Accessing data 70 o Updating data 71 o Updating properties in groups 72 o Adding and removing items in sets 73 o Resetting data to their defaults 74 75 Each example is in a separate method call. | 20 *************************************************************/ 21 22 23 24// Import everything we use 25 26import com.sun.star.beans.XPropertySet; 27import com.sun.star.beans.XMultiPropertySet; --- 40 unchanged lines hidden (view full) --- 68 69 o Accessing data 70 o Updating data 71 o Updating properties in groups 72 o Adding and removing items in sets 73 o Resetting data to their defaults 74 75 Each example is in a separate method call. |
76*/ 77public class ConfigExamples | 76*/ 77public class ConfigExamples |
78{ 79 // The ComponentContext interface of the remote component context 80 private XComponentContext mxContext = null; 81 | 78{ 79 // The ComponentContext interface of the remote component context 80 private XComponentContext mxContext = null; 81 |
82 // The MultiComponentFactory interface of the ServiceManager | 82 // The MultiComponentFactory interface of the ServiceManager |
83 private XMultiComponentFactory mxServiceManager = null; 84 85 // The MultiServiceFactory interface of the ConfigurationProvider 86 private XMultiServiceFactory mxProvider = null; 87 | 83 private XMultiComponentFactory mxServiceManager = null; 84 85 // The MultiServiceFactory interface of the ConfigurationProvider 86 private XMultiServiceFactory mxProvider = null; 87 |
88 public static void main( String args[] ) | 88 public static void main( String args[] ) |
89 { 90 try { 91 // get the remote office component context 92 com.sun.star.uno.XComponentContext xContext = 93 com.sun.star.comp.helper.Bootstrap.bootstrap(); | 89 { 90 try { 91 // get the remote office component context 92 com.sun.star.uno.XComponentContext xContext = 93 com.sun.star.comp.helper.Bootstrap.bootstrap(); |
94 | 94 |
95 if( xContext != null ) 96 System.out.println("Connected to a running office ..."); 97 else 98 System.out.println( "ERROR: Cannot connect - no remote component context available." ); | 95 if( xContext != null ) 96 System.out.println("Connected to a running office ..."); 97 else 98 System.out.println( "ERROR: Cannot connect - no remote component context available." ); |
99 | 99 |
100 // Create an instance of the class and call it's run method 101 ConfigExamples aExample = new ConfigExamples(xContext); 102 aExample.run( ); | 100 // Create an instance of the class and call it's run method 101 ConfigExamples aExample = new ConfigExamples(xContext); 102 aExample.run( ); |
103 104 // if you own the service manager dispose it here 105 // to ensure that the default provider is properly disposed and flushed | 103 104 // if you own the service manager dispose it here 105 // to ensure that the default provider is properly disposed and flushed |
106 System.exit(0); | 106 System.exit(0); |
107 } 108 catch( Exception e ) | 107 } 108 catch( Exception e ) |
109 { 110 e.printStackTrace(); 111 System.exit(-1); 112 } 113 } 114 115 /** Create a ConfigExamples instance supplying a service factory 116 */ 117 public ConfigExamples(XComponentContext xContext) 118 { 119 mxContext = xContext; 120 mxServiceManager = xContext.getServiceManager(); 121 } 122 123 /** Run the examples with a default ConfigurationProvider 124 */ | 109 { 110 e.printStackTrace(); 111 System.exit(-1); 112 } 113 } 114 115 /** Create a ConfigExamples instance supplying a service factory 116 */ 117 public ConfigExamples(XComponentContext xContext) 118 { 119 mxContext = xContext; 120 mxServiceManager = xContext.getServiceManager(); 121 } 122 123 /** Run the examples with a default ConfigurationProvider 124 */ |
125 public void run() | 125 public void run() |
126 throws com.sun.star.uno.Exception 127 { | 126 throws com.sun.star.uno.Exception 127 { |
128 mxProvider = createProvider(); | 128 mxProvider = createProvider(); |
129 130 runExamples( ); 131 132 // we are using the default ConfigurationProvider, so we must not dispose it 133 mxProvider = null; 134 } 135 136 /** Run the examples with a given ConfigurationProvider 137 */ | 129 130 runExamples( ); 131 132 // we are using the default ConfigurationProvider, so we must not dispose it 133 mxProvider = null; 134 } 135 136 /** Run the examples with a given ConfigurationProvider 137 */ |
138 public void runExamples( ) | 138 public void runExamples( ) |
139 { 140 if (checkProvider(mxProvider)) 141 { 142 System.out.println("\nStarting examples."); 143 144 readDataExample(); 145 146 browseDataExample(); --- 4 unchanged lines hidden (view full) --- 151 152 updateSetExample(); 153 154 System.out.println("\nAll Examples completed."); 155 } 156 else 157 System.out.println("ERROR: Cannot run examples without ConfigurationProvider."); 158 | 139 { 140 if (checkProvider(mxProvider)) 141 { 142 System.out.println("\nStarting examples."); 143 144 readDataExample(); 145 146 browseDataExample(); --- 4 unchanged lines hidden (view full) --- 151 152 updateSetExample(); 153 154 System.out.println("\nAll Examples completed."); 155 } 156 else 157 System.out.println("ERROR: Cannot run examples without ConfigurationProvider."); 158 |
159 } | 159 } |
160 | 160 |
161 /** Do some simple checks, if tehre is a valid ConfigurationProvider | 161 /** Do some simple checks, if there is a valid ConfigurationProvider |
162 */ 163 public static boolean checkProvider(XMultiServiceFactory xProvider) 164 { 165 // check the provider we have 166 if (xProvider == null) 167 { 168 System.out.println("No provider available. Cannot access configuration data."); 169 return false; 170 171 } 172 173 try 174 { 175 // check the provider implementation | 162 */ 163 public static boolean checkProvider(XMultiServiceFactory xProvider) 164 { 165 // check the provider we have 166 if (xProvider == null) 167 { 168 System.out.println("No provider available. Cannot access configuration data."); 169 return false; 170 171 } 172 173 try 174 { 175 // check the provider implementation |
176 XServiceInfo xProviderServices = | 176 XServiceInfo xProviderServices = |
177 (XServiceInfo) UnoRuntime.queryInterface( XServiceInfo.class, xProvider ); 178 | 177 (XServiceInfo) UnoRuntime.queryInterface( XServiceInfo.class, xProvider ); 178 |
179 if (xProviderServices == null || | 179 if (xProviderServices == null || |
180 !xProviderServices.supportsService("com.sun.star.configuration.ConfigurationProvider")) 181 { 182 System.out.println("WARNING: The provider is not a com.sun.star.configuration.ConfigurationProvider"); 183 } 184 185 if (xProviderServices != null) 186 { 187 System.out.println("Using provider implementation: " + xProviderServices.getImplementationName()); 188 } 189 190 return true; 191 } 192 catch (com.sun.star.uno.RuntimeException e) 193 { 194 System.err.println("ERROR: Failure while checking the provider services."); 195 e.printStackTrace(); 196 return false; 197 } 198 } | 180 !xProviderServices.supportsService("com.sun.star.configuration.ConfigurationProvider")) 181 { 182 System.out.println("WARNING: The provider is not a com.sun.star.configuration.ConfigurationProvider"); 183 } 184 185 if (xProviderServices != null) 186 { 187 System.out.println("Using provider implementation: " + xProviderServices.getImplementationName()); 188 } 189 190 return true; 191 } 192 catch (com.sun.star.uno.RuntimeException e) 193 { 194 System.err.println("ERROR: Failure while checking the provider services."); 195 e.printStackTrace(); 196 return false; 197 } 198 } |
199 200 /** Get the provider we have | 199 200 /** Get the provider we have |
201 */ 202 public XMultiServiceFactory getProvider( ) 203 { 204 return mxProvider; 205 } 206 | 201 */ 202 public XMultiServiceFactory getProvider( ) 203 { 204 return mxProvider; 205 } 206 |
207 /** Create a default configuration provider | 207 /** Create a default configuration provider |
208 */ 209 public XMultiServiceFactory createProvider( ) 210 throws com.sun.star.uno.Exception 211 { 212 final String sProviderService = "com.sun.star.configuration.ConfigurationProvider"; 213 214 // create the provider and return it as a XMultiServiceFactory 215 XMultiServiceFactory xProvider = (XMultiServiceFactory) | 208 */ 209 public XMultiServiceFactory createProvider( ) 210 throws com.sun.star.uno.Exception 211 { 212 final String sProviderService = "com.sun.star.configuration.ConfigurationProvider"; 213 214 // create the provider and return it as a XMultiServiceFactory 215 XMultiServiceFactory xProvider = (XMultiServiceFactory) |
216 UnoRuntime.queryInterface(XMultiServiceFactory.class, | 216 UnoRuntime.queryInterface(XMultiServiceFactory.class, |
217 mxServiceManager.createInstanceWithContext(sProviderService, | 217 mxServiceManager.createInstanceWithContext(sProviderService, |
218 mxContext)); | 218 mxContext)); |
219 220 return xProvider; 221 } 222 223 /** Create a specified read-only configuration view 224 */ 225 public Object createConfigurationView( String sPath ) 226 throws com.sun.star.uno.Exception 227 { 228 XMultiServiceFactory xProvider = getProvider(); 229 230 // The service name: Need only read access: 231 final String sReadOnlyView = "com.sun.star.configuration.ConfigurationAccess"; 232 | 219 220 return xProvider; 221 } 222 223 /** Create a specified read-only configuration view 224 */ 225 public Object createConfigurationView( String sPath ) 226 throws com.sun.star.uno.Exception 227 { 228 XMultiServiceFactory xProvider = getProvider(); 229 230 // The service name: Need only read access: 231 final String sReadOnlyView = "com.sun.star.configuration.ConfigurationAccess"; 232 |
233 // creation arguments: nodepath | 233 // creation arguments: nodepath |
234 com.sun.star.beans.PropertyValue aPathArgument = new com.sun.star.beans.PropertyValue(); 235 aPathArgument.Name = "nodepath"; 236 aPathArgument.Value = sPath; 237 238 Object[] aArguments = new Object[1]; 239 aArguments[0] = aPathArgument; 240 241 // create the view --- 7 unchanged lines hidden (view full) --- 249 Object createUpdatableView( String sPath ) 250 throws com.sun.star.uno.Exception 251 { 252 XMultiServiceFactory xProvider = getProvider(); 253 254 // The service name: Need update access: 255 final String cUpdatableView = "com.sun.star.configuration.ConfigurationUpdateAccess"; 256 | 234 com.sun.star.beans.PropertyValue aPathArgument = new com.sun.star.beans.PropertyValue(); 235 aPathArgument.Name = "nodepath"; 236 aPathArgument.Value = sPath; 237 238 Object[] aArguments = new Object[1]; 239 aArguments[0] = aPathArgument; 240 241 // create the view --- 7 unchanged lines hidden (view full) --- 249 Object createUpdatableView( String sPath ) 250 throws com.sun.star.uno.Exception 251 { 252 XMultiServiceFactory xProvider = getProvider(); 253 254 // The service name: Need update access: 255 final String cUpdatableView = "com.sun.star.configuration.ConfigurationUpdateAccess"; 256 |
257 // creation arguments: nodepath | 257 // creation arguments: nodepath |
258 com.sun.star.beans.PropertyValue aPathArgument = new com.sun.star.beans.PropertyValue(); 259 aPathArgument.Name = "nodepath"; 260 aPathArgument.Value = sPath; 261 262 Object[] aArguments = new Object[1]; 263 aArguments[0] = aPathArgument; 264 265 // create the view --- 37 unchanged lines hidden (view full) --- 303 /** This method demonstrates update access to group data 304 */ 305 protected void updateGroupExample () 306 { 307 try 308 { 309 System.out.println("\n--- starting example: update group data --------------"); 310 editGridOptions( ); | 258 com.sun.star.beans.PropertyValue aPathArgument = new com.sun.star.beans.PropertyValue(); 259 aPathArgument.Name = "nodepath"; 260 aPathArgument.Value = sPath; 261 262 Object[] aArguments = new Object[1]; 263 aArguments[0] = aPathArgument; 264 265 // create the view --- 37 unchanged lines hidden (view full) --- 303 /** This method demonstrates update access to group data 304 */ 305 protected void updateGroupExample () 306 { 307 try 308 { 309 System.out.println("\n--- starting example: update group data --------------"); 310 editGridOptions( ); |
311 } | 311 } |
312 catch ( Exception e ) 313 { 314 e.printStackTrace(); 315 } 316 } 317 318 /** This method demonstrates resetting data to its default state 319 */ 320 protected void resetGroupExample () 321 { 322 try 323 { 324 System.out.println("\n--- starting example: reset group data -----------------------------"); 325 Object aOldData = readGridConfiguration( ); 326 resetGridConfiguration( ); 327 Object aNewData = readGridConfiguration( ); 328 System.out.println("Before reset: user grid options: " + aOldData); 329 System.out.println("After reset: default grid options: " + aNewData); | 312 catch ( Exception e ) 313 { 314 e.printStackTrace(); 315 } 316 } 317 318 /** This method demonstrates resetting data to its default state 319 */ 320 protected void resetGroupExample () 321 { 322 try 323 { 324 System.out.println("\n--- starting example: reset group data -----------------------------"); 325 Object aOldData = readGridConfiguration( ); 326 resetGridConfiguration( ); 327 Object aNewData = readGridConfiguration( ); 328 System.out.println("Before reset: user grid options: " + aOldData); 329 System.out.println("After reset: default grid options: " + aNewData); |
330 } | 330 } |
331 catch ( Exception e ) 332 { 333 e.printStackTrace(); 334 } 335 } 336 337 /** This method demonstrates update access to set data 338 */ --- 6 unchanged lines hidden (view full) --- 345 } 346 catch ( Exception e ) 347 { 348 e.printStackTrace(); 349 } 350 } 351 352// READ example | 331 catch ( Exception e ) 332 { 333 e.printStackTrace(); 334 } 335 } 336 337 /** This method demonstrates update access to set data 338 */ --- 6 unchanged lines hidden (view full) --- 345 } 346 catch ( Exception e ) 347 { 348 e.printStackTrace(); 349 } 350 } 351 352// READ example |
353 /// class to hold information about grid settings | 353 // class to hold information about grid settings |
354 public static class GridOptions 355 { 356 public boolean visible; 357 public int resolution_x; 358 public int resolution_y; 359 public int subdivision_x; 360 public int subdivision_y; 361 362 public String toString() { 363 StringBuffer aBuffer = new StringBuffer(); 364 aBuffer.append("[ Grid is "); aBuffer.append(visible ? "VISIBLE" : "HIDDEN"); 365 aBuffer.append("; resolution = (" + resolution_x + "," + resolution_y + ")"); 366 aBuffer.append("; subdivision = (" + subdivision_x + "," + subdivision_y + ")"); 367 aBuffer.append(" ]"); 368 return aBuffer.toString(); 369 } 370 }; 371 | 354 public static class GridOptions 355 { 356 public boolean visible; 357 public int resolution_x; 358 public int resolution_y; 359 public int subdivision_x; 360 public int subdivision_y; 361 362 public String toString() { 363 StringBuffer aBuffer = new StringBuffer(); 364 aBuffer.append("[ Grid is "); aBuffer.append(visible ? "VISIBLE" : "HIDDEN"); 365 aBuffer.append("; resolution = (" + resolution_x + "," + resolution_y + ")"); 366 aBuffer.append("; subdivision = (" + subdivision_x + "," + subdivision_y + ")"); 367 aBuffer.append(" ]"); 368 return aBuffer.toString(); 369 } 370 }; 371 |
372 /// This method reads information about grid settings | 372 // This method reads information about grid settings |
373 protected GridOptions readGridConfiguration() 374 throws com.sun.star.uno.Exception 375 { | 373 protected GridOptions readGridConfiguration() 374 throws com.sun.star.uno.Exception 375 { |
376 // The path to the root element | 376 // The path to the root element |
377 final String cGridOptionsPath = "/org.openoffice.Office.Calc/Grid"; 378 379 // create the view 380 Object xViewRoot = createConfigurationView(cGridOptionsPath); 381 382 // the result structure 383 GridOptions options = new GridOptions(); | 377 final String cGridOptionsPath = "/org.openoffice.Office.Calc/Grid"; 378 379 // create the view 380 Object xViewRoot = createConfigurationView(cGridOptionsPath); 381 382 // the result structure 383 GridOptions options = new GridOptions(); |
384 | 384 |
385 // accessing a single nested value | 385 // accessing a single nested value |
386 XHierarchicalPropertySet xProperties = | 386 XHierarchicalPropertySet xProperties = |
387 (XHierarchicalPropertySet)UnoRuntime.queryInterface(XHierarchicalPropertySet.class, xViewRoot); 388 389 Object aVisible = xProperties.getHierarchicalPropertyValue("Option/VisibleGrid"); 390 options.visible = ((Boolean) aVisible).booleanValue(); 391 392 // accessing a nested object and its subproperties 393 Object xSubdivision = xProperties.getHierarchicalPropertyValue("Subdivision"); 394 395 XMultiPropertySet xSubdivProperties = 396 (XMultiPropertySet)UnoRuntime.queryInterface(XMultiPropertySet.class, xSubdivision); | 387 (XHierarchicalPropertySet)UnoRuntime.queryInterface(XHierarchicalPropertySet.class, xViewRoot); 388 389 Object aVisible = xProperties.getHierarchicalPropertyValue("Option/VisibleGrid"); 390 options.visible = ((Boolean) aVisible).booleanValue(); 391 392 // accessing a nested object and its subproperties 393 Object xSubdivision = xProperties.getHierarchicalPropertyValue("Subdivision"); 394 395 XMultiPropertySet xSubdivProperties = 396 (XMultiPropertySet)UnoRuntime.queryInterface(XMultiPropertySet.class, xSubdivision); |
397 398 // variables for multi-element access | 397 398 // variables for multi-element access |
399 String[] aElementNames = new String[2]; 400 401 aElementNames[0] = "XAxis"; 402 aElementNames[1] = "YAxis"; 403 404 Object[] aElementValues = xSubdivProperties.getPropertyValues(aElementNames); 405 406 options.subdivision_x = ((Integer) aElementValues[0]).intValue(); 407 options.subdivision_y = ((Integer) aElementValues[1]).intValue(); 408 409 // accessing deeply nested subproperties 410 Object xResolution = xProperties.getHierarchicalPropertyValue("Resolution"); 411 | 399 String[] aElementNames = new String[2]; 400 401 aElementNames[0] = "XAxis"; 402 aElementNames[1] = "YAxis"; 403 404 Object[] aElementValues = xSubdivProperties.getPropertyValues(aElementNames); 405 406 options.subdivision_x = ((Integer) aElementValues[0]).intValue(); 407 options.subdivision_y = ((Integer) aElementValues[1]).intValue(); 408 409 // accessing deeply nested subproperties 410 Object xResolution = xProperties.getHierarchicalPropertyValue("Resolution"); 411 |
412 XMultiHierarchicalPropertySet xResolutionProperties = | 412 XMultiHierarchicalPropertySet xResolutionProperties = |
413 (XMultiHierarchicalPropertySet) 414 UnoRuntime.queryInterface(XMultiHierarchicalPropertySet.class, xResolution); | 413 (XMultiHierarchicalPropertySet) 414 UnoRuntime.queryInterface(XMultiHierarchicalPropertySet.class, xResolution); |
415 | 415 |
416 aElementNames[0] = "XAxis/Metric"; 417 aElementNames[1] = "YAxis/Metric"; 418 419 aElementValues = xResolutionProperties.getHierarchicalPropertyValues(aElementNames); 420 421 options.resolution_x = ((Integer) aElementValues[0]).intValue(); 422 options.resolution_y = ((Integer) aElementValues[1]).intValue(); 423 424 // all options have been retrieved - clean up and return | 416 aElementNames[0] = "XAxis/Metric"; 417 aElementNames[1] = "YAxis/Metric"; 418 419 aElementValues = xResolutionProperties.getHierarchicalPropertyValues(aElementNames); 420 421 options.resolution_x = ((Integer) aElementValues[0]).intValue(); 422 options.resolution_y = ((Integer) aElementValues[1]).intValue(); 423 424 // all options have been retrieved - clean up and return |
425 // we are done with the view - dispose it | 425 // we are done with the view - dispose it |
426 427 ((XComponent)UnoRuntime.queryInterface(XComponent.class, xViewRoot)).dispose(); 428 429 return options; 430 } 431 432// BROWSE example | 426 427 ((XComponent)UnoRuntime.queryInterface(XComponent.class, xViewRoot)).dispose(); 428 429 return options; 430 } 431 432// BROWSE example |
433 /// Interface to procees information when browsing the configuration tree | 433 // Interface to process information when browsing the configuration tree |
434 public static interface IConfigurationProcessor 435 { | 434 public static interface IConfigurationProcessor 435 { |
436 /// process a value item | 436 // process a value item |
437 public abstract void processValueElement( String sPath_, Object aValue_ ); | 437 public abstract void processValueElement( String sPath_, Object aValue_ ); |
438 /// process a structural item | 438 // process a structural item |
439 public abstract void processStructuralElement( String sPath_, XInterface xElement_); 440 }; 441 | 439 public abstract void processStructuralElement( String sPath_, XInterface xElement_); 440 }; 441 |
442 /// Internal method to recursively browse a structural element in preorder | 442 // Internal method to recursively browse a structural element in preorder |
443 public void browseElementRecursively( XInterface xElement, IConfigurationProcessor aProcessor ) 444 throws com.sun.star.uno.Exception 445 { 446 // First process this as an element (preorder traversal) | 443 public void browseElementRecursively( XInterface xElement, IConfigurationProcessor aProcessor ) 444 throws com.sun.star.uno.Exception 445 { 446 // First process this as an element (preorder traversal) |
447 XHierarchicalName xElementPath = | 447 XHierarchicalName xElementPath = |
448 (XHierarchicalName) UnoRuntime.queryInterface(XHierarchicalName.class, xElement); 449 450 String sPath = xElementPath.getHierarchicalName(); 451 452 aProcessor.processStructuralElement( sPath, xElement); 453 454 // now process this as a container 455 XNameAccess xChildAccess = 456 (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, xElement); | 448 (XHierarchicalName) UnoRuntime.queryInterface(XHierarchicalName.class, xElement); 449 450 String sPath = xElementPath.getHierarchicalName(); 451 452 aProcessor.processStructuralElement( sPath, xElement); 453 454 // now process this as a container 455 XNameAccess xChildAccess = 456 (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class, xElement); |
457 | 457 |
458 // get a list of child elements 459 String[] aElementNames = xChildAccess.getElementNames(); 460 461 // and process them one by one 462 for(int i=0; i< aElementNames.length; ++i) 463 { 464 Object aChild = xChildAccess.getByName( aElementNames[i] ); 465 AnyConverter aAnyConv = new AnyConverter(); 466 // is it a structural element (object) ... 467 if ( aAnyConv.isObject(aChild) && !aAnyConv.isArray(aChild) ) 468 { | 458 // get a list of child elements 459 String[] aElementNames = xChildAccess.getElementNames(); 460 461 // and process them one by one 462 for(int i=0; i< aElementNames.length; ++i) 463 { 464 Object aChild = xChildAccess.getByName( aElementNames[i] ); 465 AnyConverter aAnyConv = new AnyConverter(); 466 // is it a structural element (object) ... 467 if ( aAnyConv.isObject(aChild) && !aAnyConv.isArray(aChild) ) 468 { |
469 // then get an interface | 469 // then get an interface |
470 XInterface xChildElement = (XInterface)UnoRuntime.queryInterface(XInterface.class, aChild); 471 472 // and continue processing child elements recursively 473 browseElementRecursively( xChildElement, aProcessor ); 474 } 475 // ... or is it a simple value 476 else 477 { | 470 XInterface xChildElement = (XInterface)UnoRuntime.queryInterface(XInterface.class, aChild); 471 472 // and continue processing child elements recursively 473 browseElementRecursively( xChildElement, aProcessor ); 474 } 475 // ... or is it a simple value 476 else 477 { |
478 // Build the path to it from the path of | 478 // Build the path to it from the path of |
479 // the element and the name of the child 480 String sChildPath; | 479 // the element and the name of the child 480 String sChildPath; |
481 sChildPath = | 481 sChildPath = |
482 xElementPath.composeHierarchicalName(aElementNames[i]); 483 484 // and process the value 485 aProcessor.processValueElement( sChildPath, aChild ); 486 } 487 } 488 } 489 | 482 xElementPath.composeHierarchicalName(aElementNames[i]); 483 484 // and process the value 485 aProcessor.processValueElement( sChildPath, aChild ); 486 } 487 } 488 } 489 |
490 /** Method to browse the part rooted at sRootPath | 490 /** Method to browse the part rooted at sRootPath |
491 of the configuration that the Provider provides. 492 493 All nodes will be processed by the IConfigurationProcessor passed. 494 */ 495 public void browseConfiguration( String sRootPath, IConfigurationProcessor aProcessor ) 496 throws com.sun.star.uno.Exception 497 { 498 // create the root element 499 XInterface xViewRoot = (XInterface)createConfigurationView( sRootPath ); | 491 of the configuration that the Provider provides. 492 493 All nodes will be processed by the IConfigurationProcessor passed. 494 */ 495 public void browseConfiguration( String sRootPath, IConfigurationProcessor aProcessor ) 496 throws com.sun.star.uno.Exception 497 { 498 // create the root element 499 XInterface xViewRoot = (XInterface)createConfigurationView( sRootPath ); |
500 | 500 |
501 // now do the processing 502 browseElementRecursively( xViewRoot, aProcessor ); 503 | 501 // now do the processing 502 browseElementRecursively( xViewRoot, aProcessor ); 503 |
504 // we are done with the view - dispose it 505 // This assumes that the processor | 504 // we are done with the view - dispose it 505 // This assumes that the processor |
506 // does not keep a reference to the elements in processStructuralElement 507 508 ((XComponent) UnoRuntime.queryInterface(XComponent.class,xViewRoot)).dispose(); 509 xViewRoot = null; 510 } 511 512 /** Method to browse the filter configuration. 513 514 Information about installed filters will be printed. 515 */ 516 public void printRegisteredFilters() 517 throws com.sun.star.uno.Exception 518 { 519 final String sProviderService = "com.sun.star.configuration.ConfigurationProvider"; 520 final String sFilterKey = "/org.openoffice.TypeDetection.Filter/Filters"; 521 522 // browse the configuration, dumping filter information | 506 // does not keep a reference to the elements in processStructuralElement 507 508 ((XComponent) UnoRuntime.queryInterface(XComponent.class,xViewRoot)).dispose(); 509 xViewRoot = null; 510 } 511 512 /** Method to browse the filter configuration. 513 514 Information about installed filters will be printed. 515 */ 516 public void printRegisteredFilters() 517 throws com.sun.star.uno.Exception 518 { 519 final String sProviderService = "com.sun.star.configuration.ConfigurationProvider"; 520 final String sFilterKey = "/org.openoffice.TypeDetection.Filter/Filters"; 521 522 // browse the configuration, dumping filter information |
523 browseConfiguration( sFilterKey, | 523 browseConfiguration( sFilterKey, |
524 new IConfigurationProcessor () { | 524 new IConfigurationProcessor () { |
525 /// prints Path and Value of properties | 525 // prints Path and Value of properties |
526 public void processValueElement( String sPath_, Object aValue_ ) { 527 if (new AnyConverter().isArray(aValue_)) 528 { 529 final Object [] aArray = (Object [])aValue_; | 526 public void processValueElement( String sPath_, Object aValue_ ) { 527 if (new AnyConverter().isArray(aValue_)) 528 { 529 final Object [] aArray = (Object [])aValue_; |
530 | 530 |
531 System.out.print("\tValue: " + sPath_ + " = { "); 532 for (int i=0; i<aArray.length; ++i) 533 { 534 if (i != 0) System.out.print(", "); 535 System.out.print(aArray[i]); 536 } 537 System.out.println(" }"); 538 } 539 else 540 System.out.println("\tValue: " + sPath_ + " = " + aValue_); 541 } | 531 System.out.print("\tValue: " + sPath_ + " = { "); 532 for (int i=0; i<aArray.length; ++i) 533 { 534 if (i != 0) System.out.print(", "); 535 System.out.print(aArray[i]); 536 } 537 System.out.println(" }"); 538 } 539 else 540 System.out.println("\tValue: " + sPath_ + " = " + aValue_); 541 } |
542 543 /// prints the Filter entries | 542 543 // prints the Filter entries |
544 public void processStructuralElement( String sPath_, XInterface xElement_) { 545 // get template information, to detect instances of the 'Filter' template | 544 public void processStructuralElement( String sPath_, XInterface xElement_) { 545 // get template information, to detect instances of the 'Filter' template |
546 XTemplateInstance xInstance = | 546 XTemplateInstance xInstance = |
547 ( XTemplateInstance )UnoRuntime.queryInterface( XTemplateInstance .class,xElement_); 548 | 547 ( XTemplateInstance )UnoRuntime.queryInterface( XTemplateInstance .class,xElement_); 548 |
549 // only select the Filter entries | 549 // only select the Filter entries |
550 if (xInstance != null && xInstance.getTemplateName().endsWith("Filter")) { 551 XNamed xNamed = (XNamed)UnoRuntime.queryInterface(XNamed.class,xElement_); 552 System.out.println("Filter " + xNamed.getName() + " (" + sPath_ + ")"); 553 } 554 } 555 } ); 556 } 557 558// GROUP UPDATE example 559 | 550 if (xInstance != null && xInstance.getTemplateName().endsWith("Filter")) { 551 XNamed xNamed = (XNamed)UnoRuntime.queryInterface(XNamed.class,xElement_); 552 System.out.println("Filter " + xNamed.getName() + " (" + sPath_ + ")"); 553 } 554 } 555 } ); 556 } 557 558// GROUP UPDATE example 559 |
560 /** This method simulates editing configuration data using a GridEditor dialog class | 560 /** This method simulates editing configuration data using a GridEditor dialog class |
561 */ 562 public void editGridOptions( ) 563 throws com.sun.star.uno.Exception 564 { | 561 */ 562 public void editGridOptions( ) 563 throws com.sun.star.uno.Exception 564 { |
565 // The path to the root element | 565 // The path to the root element |
566 final String cGridOptionsPath = "/org.openoffice.Office.Calc/Grid"; 567 568 // create the view 569 Object xViewRoot = createUpdatableView( cGridOptionsPath ); 570 571 // the 'editor' 572 GridOptionsEditor dialog = new GridOptionsEditor(); 573 574 // set up the initial values and register listeners | 566 final String cGridOptionsPath = "/org.openoffice.Office.Calc/Grid"; 567 568 // create the view 569 Object xViewRoot = createUpdatableView( cGridOptionsPath ); 570 571 // the 'editor' 572 GridOptionsEditor dialog = new GridOptionsEditor(); 573 574 // set up the initial values and register listeners |
575 // get a data access interface, to supply the view with a model | 575 // get a data access interface, to supply the view with a model |
576 XMultiHierarchicalPropertySet xProperties = 577 (XMultiHierarchicalPropertySet) 578 UnoRuntime.queryInterface(XMultiHierarchicalPropertySet.class, xViewRoot); 579 580 dialog.setModel( xProperties ); 581 582 // get a listener object (probably an adapter) that notifies | 576 XMultiHierarchicalPropertySet xProperties = 577 (XMultiHierarchicalPropertySet) 578 UnoRuntime.queryInterface(XMultiHierarchicalPropertySet.class, xViewRoot); 579 580 dialog.setModel( xProperties ); 581 582 // get a listener object (probably an adapter) that notifies |
583 // the dialog of external changes to its model | 583 // the dialog of external changes to its model |
584 XChangesListener xListener = dialog.createChangesListener( ); | 584 XChangesListener xListener = dialog.createChangesListener( ); |
585 586 XChangesNotifier xNotifier = | 585 586 XChangesNotifier xNotifier = |
587 (XChangesNotifier)UnoRuntime.queryInterface(XChangesNotifier.class, xViewRoot); 588 589 xNotifier.addChangesListener( xListener ); 590 591 // trigger the listener 592 changeSomeData( cGridOptionsPath + "/Subdivision" ); 593 594 if (dialog.execute() == GridOptionsEditor.SAVE_SETTINGS) 595 { 596 // changes have been applied to the view here | 587 (XChangesNotifier)UnoRuntime.queryInterface(XChangesNotifier.class, xViewRoot); 588 589 xNotifier.addChangesListener( xListener ); 590 591 // trigger the listener 592 changeSomeData( cGridOptionsPath + "/Subdivision" ); 593 594 if (dialog.execute() == GridOptionsEditor.SAVE_SETTINGS) 595 { 596 // changes have been applied to the view here |
597 XChangesBatch xUpdateControl = | 597 XChangesBatch xUpdateControl = |
598 (XChangesBatch) UnoRuntime.queryInterface(XChangesBatch.class,xViewRoot); | 598 (XChangesBatch) UnoRuntime.queryInterface(XChangesBatch.class,xViewRoot); |
599 | 599 |
600 try 601 { 602 xUpdateControl.commitChanges(); 603 } 604 catch (Exception e) 605 { 606 dialog.informUserOfError( e ); 607 } 608 } | 600 try 601 { 602 xUpdateControl.commitChanges(); 603 } 604 catch (Exception e) 605 { 606 dialog.informUserOfError( e ); 607 } 608 } |
609 | 609 |
610 // all changes have been handled - clean up and return 611 // listener is done now 612 xNotifier.removeChangesListener( xListener ); 613 | 610 // all changes have been handled - clean up and return 611 // listener is done now 612 xNotifier.removeChangesListener( xListener ); 613 |
614 // we are done with the view - dispose it | 614 // we are done with the view - dispose it |
615 ((XComponent)UnoRuntime.queryInterface(XComponent.class, xViewRoot)).dispose(); 616 } 617 618 /** A class that changes some grid options settings 619 620 The interface of this class is chose to resemble a possible UI dialog class 621 */ 622 private class GridOptionsEditor { | 615 ((XComponent)UnoRuntime.queryInterface(XComponent.class, xViewRoot)).dispose(); 616 } 617 618 /** A class that changes some grid options settings 619 620 The interface of this class is chose to resemble a possible UI dialog class 621 */ 622 private class GridOptionsEditor { |
623 /// the data this editor edits | 623 // the data this editor edits |
624 XMultiHierarchicalPropertySet mxModel; 625 626 public static final int CANCELED = 0; 627 public static final int SAVE_SETTINGS = 1; 628 629 // sets a model and updates the display 630 public void setModel(XMultiHierarchicalPropertySet xModel) { 631 mxModel = xModel; --- 12 unchanged lines hidden (view full) --- 644 } 645 catch (Exception e) 646 { 647 informUserOfError(e); 648 return CANCELED; 649 } 650 } 651 | 624 XMultiHierarchicalPropertySet mxModel; 625 626 public static final int CANCELED = 0; 627 public static final int SAVE_SETTINGS = 1; 628 629 // sets a model and updates the display 630 public void setModel(XMultiHierarchicalPropertySet xModel) { 631 mxModel = xModel; --- 12 unchanged lines hidden (view full) --- 644 } 645 catch (Exception e) 646 { 647 informUserOfError(e); 648 return CANCELED; 649 } 650 } 651 |
652 /// this method is called to report an error during dialog execution to the zuser | 652 // this method is called to report an error during dialog execution to the user |
653 public void informUserOfError(Exception e) { 654 System.err.println("ERROR in GridEditor:"); 655 e.printStackTrace(); 656 } 657 | 653 public void informUserOfError(Exception e) { 654 System.err.println("ERROR in GridEditor:"); 655 e.printStackTrace(); 656 } 657 |
658 /// this method is called to allow the dialog to get feedback about changes occurring elsewhere | 658 // this method is called to allow the dialog to get feedback about changes occurring elsewhere |
659 public XChangesListener createChangesListener() { 660 if (mxModel == null) return null; 661 662 return (new XChangesListener () { 663 public void changesOccurred( ChangesEvent event ) { 664 System.out.println("GridEditor - Listener received changes event containing " + 665 event.Changes.length + " change(s)."); 666 updateDisplay(); 667 } 668 669 public void disposing(EventObject event) { 670 System.out.println("GridEditor - Listener received disposed event: releasing model"); 671 setModel(null); 672 } 673 }); 674 } | 659 public XChangesListener createChangesListener() { 660 if (mxModel == null) return null; 661 662 return (new XChangesListener () { 663 public void changesOccurred( ChangesEvent event ) { 664 System.out.println("GridEditor - Listener received changes event containing " + 665 event.Changes.length + " change(s)."); 666 updateDisplay(); 667 } 668 669 public void disposing(EventObject event) { 670 System.out.println("GridEditor - Listener received disposed event: releasing model"); 671 setModel(null); 672 } 673 }); 674 } |
675 /// this method is called when data has changed to display the updated data 676 private void updateDisplay() { | 675 // this method is called when data has changed to display the updated data 676 private void updateDisplay() { |
677 if (mxModel != null) 678 System.out.println("Grid options editor: data=" + readModel()); 679 else 680 System.out.println("Grid options editor: no model set"); 681 } 682 683 // this method is used to read all relevant data from the model | 677 if (mxModel != null) 678 System.out.println("Grid options editor: data=" + readModel()); 679 else 680 System.out.println("Grid options editor: no model set"); 681 } 682 683 // this method is used to read all relevant data from the model |
684 private GridOptions readModel() | 684 private GridOptions readModel() |
685 { 686 try 687 { 688 String [] aOptionNames = new String [5]; 689 aOptionNames[0] = "Option/VisibleGrid"; 690 aOptionNames[1] = "Subdivision/XAxis"; 691 aOptionNames[2] = "Subdivision/YAxis"; 692 aOptionNames[3] = "Resolution/XAxis/Metric"; --- 17 unchanged lines hidden (view full) --- 710 } 711 } 712 713 // this method executes an edit 714 private void toggleVisibility() 715 { 716 try 717 { | 685 { 686 try 687 { 688 String [] aOptionNames = new String [5]; 689 aOptionNames[0] = "Option/VisibleGrid"; 690 aOptionNames[1] = "Subdivision/XAxis"; 691 aOptionNames[2] = "Subdivision/YAxis"; 692 aOptionNames[3] = "Resolution/XAxis/Metric"; --- 17 unchanged lines hidden (view full) --- 710 } 711 } 712 713 // this method executes an edit 714 private void toggleVisibility() 715 { 716 try 717 { |
718 XHierarchicalPropertySet xHPS = | 718 XHierarchicalPropertySet xHPS = |
719 (XHierarchicalPropertySet)UnoRuntime.queryInterface(XHierarchicalPropertySet.class, mxModel); 720 721 final String sSetting = "Option/VisibleGrid"; 722 723 System.out.println("GridEditor: toggling Visibility"); 724 725 Boolean bOldValue = (Boolean)xHPS.getHierarchicalPropertyValue(sSetting); 726 727 Boolean bNewValue = new Boolean( ! bOldValue.booleanValue() ); | 719 (XHierarchicalPropertySet)UnoRuntime.queryInterface(XHierarchicalPropertySet.class, mxModel); 720 721 final String sSetting = "Option/VisibleGrid"; 722 723 System.out.println("GridEditor: toggling Visibility"); 724 725 Boolean bOldValue = (Boolean)xHPS.getHierarchicalPropertyValue(sSetting); 726 727 Boolean bNewValue = new Boolean( ! bOldValue.booleanValue() ); |
728 | 728 |
729 xHPS.setHierarchicalPropertyValue(sSetting,bNewValue); 730 } 731 catch (Exception e) 732 { 733 informUserOfError(e); 734 } 735 } 736 } 737 | 729 xHPS.setHierarchicalPropertyValue(sSetting,bNewValue); 730 } 731 catch (Exception e) 732 { 733 informUserOfError(e); 734 } 735 } 736 } 737 |
738 /** This method creates an extra updatable view to change some data 739 and trigger the listener of the GridEditor | 738 /** This method creates an extra updatable view to change some data 739 and trigger the listener of the GridEditor |
740 */ | 740 */ |
741 void changeSomeData(String xKey) | 741 void changeSomeData(String xKey) |
742 { 743 try 744 { 745 Object xOtherViewRoot = createUpdatableView(xKey); 746 747 XNameReplace aReplace = (XNameReplace)UnoRuntime.queryInterface(XNameReplace.class, xOtherViewRoot); 748 749 String aItemNames [] = aReplace.getElementNames(); --- 17 unchanged lines hidden (view full) --- 767 boolean bNew = ! bOld; 768 769 System.out.println("Replacing boolean value: " + aItemNames [i]); 770 aReplace.replaceByName( aItemNames [i], new Boolean( bNew ) ); 771 } 772 } 773 774 // commit the changes | 742 { 743 try 744 { 745 Object xOtherViewRoot = createUpdatableView(xKey); 746 747 XNameReplace aReplace = (XNameReplace)UnoRuntime.queryInterface(XNameReplace.class, xOtherViewRoot); 748 749 String aItemNames [] = aReplace.getElementNames(); --- 17 unchanged lines hidden (view full) --- 767 boolean bNew = ! bOld; 768 769 System.out.println("Replacing boolean value: " + aItemNames [i]); 770 aReplace.replaceByName( aItemNames [i], new Boolean( bNew ) ); 771 } 772 } 773 774 // commit the changes |
775 XChangesBatch xUpdateControl = | 775 XChangesBatch xUpdateControl = |
776 (XChangesBatch) UnoRuntime.queryInterface(XChangesBatch.class,xOtherViewRoot); | 776 (XChangesBatch) UnoRuntime.queryInterface(XChangesBatch.class,xOtherViewRoot); |
777 | 777 |
778 xUpdateControl.commitChanges(); 779 | 778 xUpdateControl.commitChanges(); 779 |
780 // we are done with the view - dispose it | 780 // we are done with the view - dispose it |
781 ((XComponent)UnoRuntime.queryInterface(XComponent.class, xOtherViewRoot)).dispose(); 782 } 783 catch (Exception e) 784 { 785 System.err.println("Could not change some data in a different view. An exception occurred:"); 786 e.printStackTrace(); 787 } 788 } 789 790// GROUP RESET EXAMPLE | 781 ((XComponent)UnoRuntime.queryInterface(XComponent.class, xOtherViewRoot)).dispose(); 782 } 783 catch (Exception e) 784 { 785 System.err.println("Could not change some data in a different view. An exception occurred:"); 786 e.printStackTrace(); 787 } 788 } 789 790// GROUP RESET EXAMPLE |
791 /// This method resets the grid settings to their default values | 791 // This method resets the grid settings to their default values |
792 protected void resetGridConfiguration() 793 throws com.sun.star.uno.Exception 794 { | 792 protected void resetGridConfiguration() 793 throws com.sun.star.uno.Exception 794 { |
795 // The path to the root element | 795 // The path to the root element |
796 final String cGridOptionsPath = "/org.openoffice.Office.Calc/Grid"; 797 798 // create the view 799 Object xViewRoot = createUpdatableView(cGridOptionsPath); 800 801 // resetting a single nested value | 796 final String cGridOptionsPath = "/org.openoffice.Office.Calc/Grid"; 797 798 // create the view 799 Object xViewRoot = createUpdatableView(cGridOptionsPath); 800 801 // resetting a single nested value |
802 XHierarchicalNameAccess xHierarchicalAccess = | 802 XHierarchicalNameAccess xHierarchicalAccess = |
803 (XHierarchicalNameAccess)UnoRuntime.queryInterface(XHierarchicalNameAccess.class, xViewRoot); 804 805 // get using absolute name 806 Object xOptions = xHierarchicalAccess.getByHierarchicalName(cGridOptionsPath + "/Option"); 807 | 803 (XHierarchicalNameAccess)UnoRuntime.queryInterface(XHierarchicalNameAccess.class, xViewRoot); 804 805 // get using absolute name 806 Object xOptions = xHierarchicalAccess.getByHierarchicalName(cGridOptionsPath + "/Option"); 807 |
808 XPropertyState xOptionState = | 808 XPropertyState xOptionState = |
809 (XPropertyState)UnoRuntime.queryInterface(XPropertyState.class, xOptions); 810 811 xOptionState.setPropertyToDefault("VisibleGrid"); 812 813 // resetting more deeply nested values 814 Object xResolutionX = xHierarchicalAccess.getByHierarchicalName("Resolution/XAxis"); 815 Object xResolutionY = xHierarchicalAccess.getByHierarchicalName("Resolution/YAxis"); 816 | 809 (XPropertyState)UnoRuntime.queryInterface(XPropertyState.class, xOptions); 810 811 xOptionState.setPropertyToDefault("VisibleGrid"); 812 813 // resetting more deeply nested values 814 Object xResolutionX = xHierarchicalAccess.getByHierarchicalName("Resolution/XAxis"); 815 Object xResolutionY = xHierarchicalAccess.getByHierarchicalName("Resolution/YAxis"); 816 |
817 XPropertyState xResolutionStateX = | 817 XPropertyState xResolutionStateX = |
818 (XPropertyState)UnoRuntime.queryInterface(XPropertyState.class, xResolutionX); | 818 (XPropertyState)UnoRuntime.queryInterface(XPropertyState.class, xResolutionX); |
819 XPropertyState xResolutionStateY = | 819 XPropertyState xResolutionStateY = |
820 (XPropertyState)UnoRuntime.queryInterface(XPropertyState.class, xResolutionY); 821 822 xResolutionStateX.setPropertyToDefault("Metric"); 823 xResolutionStateY.setPropertyToDefault("Metric"); 824 825 // resetting multiple sibling values 826 Object xSubdivision = xHierarchicalAccess.getByHierarchicalName("Subdivision"); 827 828 XMultiPropertyStates xSubdivisionStates = 829 (XMultiPropertyStates)UnoRuntime.queryInterface(XMultiPropertyStates.class, xSubdivision); | 820 (XPropertyState)UnoRuntime.queryInterface(XPropertyState.class, xResolutionY); 821 822 xResolutionStateX.setPropertyToDefault("Metric"); 823 xResolutionStateY.setPropertyToDefault("Metric"); 824 825 // resetting multiple sibling values 826 Object xSubdivision = xHierarchicalAccess.getByHierarchicalName("Subdivision"); 827 828 XMultiPropertyStates xSubdivisionStates = 829 (XMultiPropertyStates)UnoRuntime.queryInterface(XMultiPropertyStates.class, xSubdivision); |
830 | 830 |
831 xSubdivisionStates.setAllPropertiesToDefault(); 832 833 // commit the changes | 831 xSubdivisionStates.setAllPropertiesToDefault(); 832 833 // commit the changes |
834 XChangesBatch xUpdateControl = | 834 XChangesBatch xUpdateControl = |
835 (XChangesBatch) UnoRuntime.queryInterface(XChangesBatch.class,xViewRoot); | 835 (XChangesBatch) UnoRuntime.queryInterface(XChangesBatch.class,xViewRoot); |
836 | 836 |
837 xUpdateControl.commitChanges(); 838 | 837 xUpdateControl.commitChanges(); 838 |
839 // we are done with the view - dispose it | 839 // we are done with the view - dispose it |
840 ((XComponent)UnoRuntime.queryInterface(XComponent.class, xViewRoot)).dispose(); 841 } 842 843 844// SET UPDATE EXAMPLE 845 private static boolean SET_EXAMPLE_BROKEN_IN_THIS_RELEASE = true; 846 847 /** This method stores a sample data source given some connection data. 848 | 840 ((XComponent)UnoRuntime.queryInterface(XComponent.class, xViewRoot)).dispose(); 841 } 842 843 844// SET UPDATE EXAMPLE 845 private static boolean SET_EXAMPLE_BROKEN_IN_THIS_RELEASE = true; 846 847 /** This method stores a sample data source given some connection data. 848 |
849 ATTENTION: This example requires an older version of the | 849 ATTENTION: This example requires an older version of the |
850 org.openoffice.Office.DataAccess schema. 851 It does not work with the current schema. | 850 org.openoffice.Office.DataAccess schema. 851 It does not work with the current schema. |
852 Because of this, the method currenty does nothing. | 852 Because of this, the method currently does nothing. |
853 You can still use the techniques shown in the example code. 854 */ 855 void storeSampleDataSource() 856 throws com.sun.star.uno.Exception 857 { | 853 You can still use the techniques shown in the example code. 854 */ 855 void storeSampleDataSource() 856 throws com.sun.star.uno.Exception 857 { |
858 if (SET_EXAMPLE_BROKEN_IN_THIS_RELEASE) | 858 if (SET_EXAMPLE_BROKEN_IN_THIS_RELEASE) |
859 { 860 System.out.println("- DISABLED: (the existing example does not work with this version) -"); 861 return; // this function does not work 862 } | 859 { 860 System.out.println("- DISABLED: (the existing example does not work with this version) -"); 861 return; // this function does not work 862 } |
863 | 863 |
864 String sSampleDataSourceName = "SampleTextDatabase"; 865 866 String sSampleDataSourceURL = "sdbc:flat:$(userurl)/database/SampleTextDatabase"; 867 // String sSampleDataSourceURL = "sdbc:flat:file:///usr/local/database/SampleTextDatabase"; 868 // String sSampleDataSourceURL = "sdbc:flat:file:///C:/data/database/SampleTextDatabase"; 869 870 com.sun.star.beans.NamedValue [] aSettings = new com.sun.star.beans.NamedValue [2]; 871 aSettings[0] = new com.sun.star.beans.NamedValue("HeaderLine",new Boolean(true)); 872 aSettings[1] = new com.sun.star.beans.NamedValue("FieldDelimiter",";"); 873 874 String [] aTableFilter = new String[2]; 875 aTableFilter[0] = "table.txt"; 876 aTableFilter[1] = "othertable.txt"; 877 878 storeDataSource(sSampleDataSourceName,sSampleDataSourceURL,"",false,0,aSettings,aTableFilter); 879 } 880 | 864 String sSampleDataSourceName = "SampleTextDatabase"; 865 866 String sSampleDataSourceURL = "sdbc:flat:$(userurl)/database/SampleTextDatabase"; 867 // String sSampleDataSourceURL = "sdbc:flat:file:///usr/local/database/SampleTextDatabase"; 868 // String sSampleDataSourceURL = "sdbc:flat:file:///C:/data/database/SampleTextDatabase"; 869 870 com.sun.star.beans.NamedValue [] aSettings = new com.sun.star.beans.NamedValue [2]; 871 aSettings[0] = new com.sun.star.beans.NamedValue("HeaderLine",new Boolean(true)); 872 aSettings[1] = new com.sun.star.beans.NamedValue("FieldDelimiter",";"); 873 874 String [] aTableFilter = new String[2]; 875 aTableFilter[0] = "table.txt"; 876 aTableFilter[1] = "othertable.txt"; 877 878 storeDataSource(sSampleDataSourceName,sSampleDataSourceURL,"",false,0,aSettings,aTableFilter); 879 } 880 |
881 /// This method stores a data source given some connection data | 881 // This method stores a data source given some connection data |
882 void storeDataSource( 883 String sDataSourceName, 884 String sDataSourceURL, 885 String sUser, 886 boolean bNeedsPassword, 887 int nTimeout, 888 com.sun.star.beans.NamedValue [] aDriverSettings, 889 String [] aTableFilter 890 ) 891 throws com.sun.star.uno.Exception 892 { | 882 void storeDataSource( 883 String sDataSourceName, 884 String sDataSourceURL, 885 String sUser, 886 boolean bNeedsPassword, 887 int nTimeout, 888 com.sun.star.beans.NamedValue [] aDriverSettings, 889 String [] aTableFilter 890 ) 891 throws com.sun.star.uno.Exception 892 { |
893 // create the view and get the data source element | 893 // create the view and get the data source element |
894 Object xDataSource = createDataSourceDescription(getProvider(),sDataSourceName); 895 | 894 Object xDataSource = createDataSourceDescription(getProvider(),sDataSourceName); 895 |
896 // set the values | 896 // set the values |
897 XPropertySet xDataSourceProperties = 898 (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, xDataSource); 899 900 xDataSourceProperties.setPropertyValue("URL", sDataSourceURL ); 901 xDataSourceProperties.setPropertyValue("User", sUser ); 902 xDataSourceProperties.setPropertyValue("IsPasswordRequired", new Boolean( bNeedsPassword ) ); 903 xDataSourceProperties.setPropertyValue("LoginTimeout", new Integer( nTimeout ) ); 904 905 if ( aTableFilter != null ) 906 xDataSourceProperties.setPropertyValue("TableFilter", aTableFilter ); | 897 XPropertySet xDataSourceProperties = 898 (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, xDataSource); 899 900 xDataSourceProperties.setPropertyValue("URL", sDataSourceURL ); 901 xDataSourceProperties.setPropertyValue("User", sUser ); 902 xDataSourceProperties.setPropertyValue("IsPasswordRequired", new Boolean( bNeedsPassword ) ); 903 xDataSourceProperties.setPropertyValue("LoginTimeout", new Integer( nTimeout ) ); 904 905 if ( aTableFilter != null ) 906 xDataSourceProperties.setPropertyValue("TableFilter", aTableFilter ); |
907 | 907 |
908 // store the driver-specific settings 909 if (aDriverSettings != null) 910 { 911 Object xSettingsSet = xDataSourceProperties.getPropertyValue("DataSourceSettings"); 912 storeSettings( xSettingsSet, aDriverSettings); 913 } 914 915 // save the data and dispose the view 916 // recover the view root 917 Object xViewRoot = getViewRoot(xDataSource); 918 919 // commit the changes | 908 // store the driver-specific settings 909 if (aDriverSettings != null) 910 { 911 Object xSettingsSet = xDataSourceProperties.getPropertyValue("DataSourceSettings"); 912 storeSettings( xSettingsSet, aDriverSettings); 913 } 914 915 // save the data and dispose the view 916 // recover the view root 917 Object xViewRoot = getViewRoot(xDataSource); 918 919 // commit the changes |
920 XChangesBatch xUpdateControl = | 920 XChangesBatch xUpdateControl = |
921 (XChangesBatch) UnoRuntime.queryInterface(XChangesBatch.class,xViewRoot); | 921 (XChangesBatch) UnoRuntime.queryInterface(XChangesBatch.class,xViewRoot); |
922 | 922 |
923 xUpdateControl.commitChanges(); 924 925 // now clean up 926 ((XComponent) UnoRuntime.queryInterface(XComponent.class, xViewRoot)).dispose(); 927 } 928 929 /** This method gets the DataSourceDescription for a data source. 930 It either gets the existing entry or creates a new instance. 931 */ 932 Object createDataSourceDescription(XMultiServiceFactory xProvider, String sDataSourceName ) 933 throws com.sun.star.uno.Exception 934 { 935 // The service name: Need an update access: 936 final String cUpdatableView = "com.sun.star.configuration.ConfigurationUpdateAccess"; 937 | 923 xUpdateControl.commitChanges(); 924 925 // now clean up 926 ((XComponent) UnoRuntime.queryInterface(XComponent.class, xViewRoot)).dispose(); 927 } 928 929 /** This method gets the DataSourceDescription for a data source. 930 It either gets the existing entry or creates a new instance. 931 */ 932 Object createDataSourceDescription(XMultiServiceFactory xProvider, String sDataSourceName ) 933 throws com.sun.star.uno.Exception 934 { 935 // The service name: Need an update access: 936 final String cUpdatableView = "com.sun.star.configuration.ConfigurationUpdateAccess"; 937 |
938 // The path to the DataSources set node | 938 // The path to the DataSources set node |
939 final String cDataSourcesPath = "/org.openoffice.Office.DataAccess/DataSources"; 940 | 939 final String cDataSourcesPath = "/org.openoffice.Office.DataAccess/DataSources"; 940 |
941 // creation arguments: nodepath | 941 // creation arguments: nodepath |
942 com.sun.star.beans.PropertyValue aPathArgument = new com.sun.star.beans.PropertyValue(); 943 aPathArgument.Name = "nodepath"; 944 aPathArgument.Value = cDataSourcesPath ; 945 946 Object[] aArguments = new Object[1]; 947 aArguments[0] = aPathArgument; 948 949 // create the view | 942 com.sun.star.beans.PropertyValue aPathArgument = new com.sun.star.beans.PropertyValue(); 943 aPathArgument.Name = "nodepath"; 944 aPathArgument.Value = cDataSourcesPath ; 945 946 Object[] aArguments = new Object[1]; 947 aArguments[0] = aPathArgument; 948 949 // create the view |
950 Object xViewRoot = | 950 Object xViewRoot = |
951 xProvider.createInstanceWithArguments(cUpdatableView, aArguments); 952 953 XNameAccess xSetOfDataSources = 954 (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class,xViewRoot); 955 956 Object xDataSourceDescriptor = null; // the result 957 if ( xSetOfDataSources .hasByName( sDataSourceName )) 958 { 959 // the element is there | 951 xProvider.createInstanceWithArguments(cUpdatableView, aArguments); 952 953 XNameAccess xSetOfDataSources = 954 (XNameAccess) UnoRuntime.queryInterface(XNameAccess.class,xViewRoot); 955 956 Object xDataSourceDescriptor = null; // the result 957 if ( xSetOfDataSources .hasByName( sDataSourceName )) 958 { 959 // the element is there |
960 try | 960 try |
961 { 962 // the view should point to the element directly, so we need to extend the path 963 XHierarchicalName xComposePath = (XHierarchicalName) 964 UnoRuntime.queryInterface(XHierarchicalName.class, xSetOfDataSources ); | 961 { 962 // the view should point to the element directly, so we need to extend the path 963 XHierarchicalName xComposePath = (XHierarchicalName) 964 UnoRuntime.queryInterface(XHierarchicalName.class, xSetOfDataSources ); |
965 | 965 |
966 String sElementPath = xComposePath.composeHierarchicalName( sDataSourceName ); 967 968 // use the name of the element now 969 aPathArgument.Value = sElementPath; 970 971 // create another view now 972 Object[] aDeepArguments = new Object[1]; 973 aDeepArguments[0] = aPathArgument; 974 975 // create the view | 966 String sElementPath = xComposePath.composeHierarchicalName( sDataSourceName ); 967 968 // use the name of the element now 969 aPathArgument.Value = sElementPath; 970 971 // create another view now 972 Object[] aDeepArguments = new Object[1]; 973 aDeepArguments[0] = aPathArgument; 974 975 // create the view |
976 xDataSourceDescriptor = | 976 xDataSourceDescriptor = |
977 xProvider.createInstanceWithArguments(cUpdatableView, aDeepArguments); 978 | 977 xProvider.createInstanceWithArguments(cUpdatableView, aDeepArguments); 978 |
979 if ( xDataSourceDescriptor != null) // all went fine | 979 if ( xDataSourceDescriptor != null) // all went fine |
980 { 981 // dispose the other view 982 ((XComponent)UnoRuntime.queryInterface(XComponent.class, xViewRoot)).dispose(); 983 xViewRoot = null; 984 } 985 } | 980 { 981 // dispose the other view 982 ((XComponent)UnoRuntime.queryInterface(XComponent.class, xViewRoot)).dispose(); 983 xViewRoot = null; 984 } 985 } |
986 catch (Exception e) | 986 catch (Exception e) |
987 { | 987 { |
988 // something went wrong, we retry with a new element | 988 // something went wrong, we retry with a new element |
989 System.err.println("WARNING: An exception occurred while creating a view for an existing data source: " + e); | 989 System.err.println("WARNING: An exception occurred while creating a view for an existing data source: " + e); |
990 xDataSourceDescriptor = null; | 990 xDataSourceDescriptor = null; |
991 } 992 } 993 994 // do we have a result element yet ? 995 if ( xDataSourceDescriptor == null) 996 { | 991 } 992 } 993 994 // do we have a result element yet ? 995 if ( xDataSourceDescriptor == null) 996 { |
997 // get the container 998 XNameContainer xSetUpdate = | 997 // get the container 998 XNameContainer xSetUpdate = |
999 (XNameContainer)UnoRuntime.queryInterface(XNameContainer.class, xViewRoot); 1000 1001 // create a new detached set element (instance of DataSourceDescription) 1002 XSingleServiceFactory xElementFactory = 1003 (XSingleServiceFactory)UnoRuntime.queryInterface(XSingleServiceFactory.class, xSetUpdate); 1004 1005 // the new element is the result ! | 999 (XNameContainer)UnoRuntime.queryInterface(XNameContainer.class, xViewRoot); 1000 1001 // create a new detached set element (instance of DataSourceDescription) 1002 XSingleServiceFactory xElementFactory = 1003 (XSingleServiceFactory)UnoRuntime.queryInterface(XSingleServiceFactory.class, xSetUpdate); 1004 1005 // the new element is the result ! |
1006 xDataSourceDescriptor = xElementFactory.createInstance(); | 1006 xDataSourceDescriptor = xElementFactory.createInstance(); |
1007 | 1007 |
1008 // insert it - this also names the element 1009 xSetUpdate.insertByName( sDataSourceName , xDataSourceDescriptor ); | 1008 // insert it - this also names the element 1009 xSetUpdate.insertByName( sDataSourceName , xDataSourceDescriptor ); |
1010 } 1011 1012 return xDataSourceDescriptor ; 1013 } 1014 | 1010 } 1011 1012 return xDataSourceDescriptor ; 1013 } 1014 |
1015 /// this method stores a number of settings in a set node containing DataSourceSetting objects | 1015 // This method stores a number of settings in a set node containing DataSourceSetting objects |
1016 void storeSettings(Object xSettingsSet, com.sun.star.beans.NamedValue [] aSettings ) 1017 throws com.sun.star.uno.Exception 1018 { | 1016 void storeSettings(Object xSettingsSet, com.sun.star.beans.NamedValue [] aSettings ) 1017 throws com.sun.star.uno.Exception 1018 { |
1019 if (aSettings == null) | 1019 if (aSettings == null) |
1020 return; 1021 1022 // get the settings set as a container | 1020 return; 1021 1022 // get the settings set as a container |
1023 XNameContainer xSettingsContainer = | 1023 XNameContainer xSettingsContainer = |
1024 (XNameContainer) UnoRuntime.queryInterface( XNameContainer.class, xSettingsSet); 1025 1026 // and get a factory interface for creating the entries | 1024 (XNameContainer) UnoRuntime.queryInterface( XNameContainer.class, xSettingsSet); 1025 1026 // and get a factory interface for creating the entries |
1027 XSingleServiceFactory xSettingsFactory = | 1027 XSingleServiceFactory xSettingsFactory = |
1028 (XSingleServiceFactory) UnoRuntime.queryInterface(XSingleServiceFactory.class, xSettingsSet); 1029 1030 // now insert the individual settings 1031 for (int i = 0; i < aSettings.length; ++i) { 1032 // create a DataSourceSetting object | 1028 (XSingleServiceFactory) UnoRuntime.queryInterface(XSingleServiceFactory.class, xSettingsSet); 1029 1030 // now insert the individual settings 1031 for (int i = 0; i < aSettings.length; ++i) { 1032 // create a DataSourceSetting object |
1033 XPropertySet xSetting = (XPropertySet) | 1033 XPropertySet xSetting = (XPropertySet) |
1034 UnoRuntime.queryInterface( XPropertySet.class, xSettingsFactory.createInstance() ); 1035 1036 // can set the value before inserting 1037 xSetting.setPropertyValue( "Value", aSettings[i].Value ); 1038 1039 // and now insert or replace as appropriate 1040 if (xSettingsContainer.hasByName( aSettings[i].Name )) 1041 xSettingsContainer.replaceByName( aSettings[i].Name, xSetting ); 1042 else 1043 xSettingsContainer.insertByName( aSettings[i].Name, xSetting ); 1044 } 1045 } 1046 1047// HELPER FUNCTIONS 1048 | 1034 UnoRuntime.queryInterface( XPropertySet.class, xSettingsFactory.createInstance() ); 1035 1036 // can set the value before inserting 1037 xSetting.setPropertyValue( "Value", aSettings[i].Value ); 1038 1039 // and now insert or replace as appropriate 1040 if (xSettingsContainer.hasByName( aSettings[i].Name )) 1041 xSettingsContainer.replaceByName( aSettings[i].Name, xSetting ); 1042 else 1043 xSettingsContainer.insertByName( aSettings[i].Name, xSetting ); 1044 } 1045 } 1046 1047// HELPER FUNCTIONS 1048 |
1049 /// This method get the view root node given an interface to any node in the view | 1049 // This method get the view root node given an interface to any node in the view |
1050 public static Object getViewRoot(Object xElement) 1051 { | 1050 public static Object getViewRoot(Object xElement) 1051 { |
1052 Object xResult = xElement; 1053 1054 // set the result to its parent until that would be null | 1052 Object xResult = xElement; 1053 1054 // set the result to its parent until that would be null |
1055 Object xParent; 1056 do 1057 { 1058 XChild xParentAccess = 1059 (XChild) UnoRuntime.queryInterface(XChild.class,xResult); 1060 1061 if (xParentAccess != null) 1062 xParent = xParentAccess.getParent(); --- 5 unchanged lines hidden (view full) --- 1068 } 1069 while (xParent != null); 1070 1071 return xResult; 1072 } 1073 1074// workaround methods for unimplemented functionality 1075 | 1055 Object xParent; 1056 do 1057 { 1058 XChild xParentAccess = 1059 (XChild) UnoRuntime.queryInterface(XChild.class,xResult); 1060 1061 if (xParentAccess != null) 1062 xParent = xParentAccess.getParent(); --- 5 unchanged lines hidden (view full) --- 1068 } 1069 while (xParent != null); 1070 1071 return xResult; 1072 } 1073 1074// workaround methods for unimplemented functionality 1075 |
1076 /// WORKAROUND: does the same as xNamedItem.setName(sNewName) should do 1077 void renameSetItem(XNamed xNamedItem, String sNewName) | 1076 // WORKAROUND: does the same as xNamedItem.setName(sNewName) should do 1077 void renameSetItem(XNamed xNamedItem, String sNewName) |
1078 throws com.sun.star.uno.Exception 1079 { | 1078 throws com.sun.star.uno.Exception 1079 { |
1080 XChild xChildItem = (XChild) | 1080 XChild xChildItem = (XChild) |
1081 UnoRuntime.queryInterface(XChild.class, xNamedItem); 1082 | 1081 UnoRuntime.queryInterface(XChild.class, xNamedItem); 1082 |
1083 XNameContainer xParentSet = (XNameContainer) | 1083 XNameContainer xParentSet = (XNameContainer) |
1084 UnoRuntime.queryInterface( XNameContainer.class, xChildItem.getParent() ); 1085 1086 String sOldName = xNamedItem.getName(); 1087 1088 // now rename the item 1089 xParentSet.removeByName(sOldName); 1090 xParentSet.insertByName(sNewName,xNamedItem); | 1084 UnoRuntime.queryInterface( XNameContainer.class, xChildItem.getParent() ); 1085 1086 String sOldName = xNamedItem.getName(); 1087 1088 // now rename the item 1089 xParentSet.removeByName(sOldName); 1090 xParentSet.insertByName(sNewName,xNamedItem); |
1091 } | 1091 } |
1092 | 1092 |
1093 /// WORKAROUND: does the same as xChildItem.setParent( xNewParent ) should do 1094 void moveSetItem(XChild xChildItem, XNameContainer xNewParent) | 1093 // WORKAROUND: does the same as xChildItem.setParent( xNewParent ) should do 1094 void moveSetItem(XChild xChildItem, XNameContainer xNewParent) |
1095 throws com.sun.star.uno.Exception 1096 { | 1095 throws com.sun.star.uno.Exception 1096 { |
1097 XNamed xNamedItem = (XNamed) | 1097 XNamed xNamedItem = (XNamed) |
1098 UnoRuntime.queryInterface(XNamed.class, xChildItem); 1099 | 1098 UnoRuntime.queryInterface(XNamed.class, xChildItem); 1099 |
1100 XNameContainer xOldParent = (XNameContainer) | 1100 XNameContainer xOldParent = (XNameContainer) |
1101 UnoRuntime.queryInterface( XNameContainer.class, xChildItem.getParent() ); 1102 1103 String sItemName = xNamedItem.getName(); 1104 1105 // now rename the item 1106 xOldParent.removeByName(sItemName); 1107 xNewParent.insertByName(sItemName,xChildItem); 1108 } 1109 1110 1111// ------- the end ----------- 1112} | 1101 UnoRuntime.queryInterface( XNameContainer.class, xChildItem.getParent() ); 1102 1103 String sItemName = xNamedItem.getName(); 1104 1105 // now rename the item 1106 xOldParent.removeByName(sItemName); 1107 xNewParent.insertByName(sItemName,xChildItem); 1108 } 1109 1110 1111// ------- the end ----------- 1112} |