| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| import java.io.*; |
| |
| import com.sun.star.lang.XComponent; |
| import com.sun.star.uno.*; |
| import com.sun.star.bridge.XUnoUrlResolver; |
| import com.sun.star.beans.XPropertySet; |
| import com.sun.star.container.XNameAccess; |
| import com.sun.star.container.XIndexAccess; |
| import com.sun.star.sdbc.*; |
| import com.sun.star.sdbcx.*; |
| import com.sun.star.lang.XMultiServiceFactory; |
| |
| public class sdbcx |
| { |
| private XMultiServiceFactory xORB; |
| private static XConnection con; |
| private XTablesSupplier xTabSup; |
| |
| public static XMultiServiceFactory rSmgr; |
| public static void main(String argv[]) throws java.lang.Exception |
| { |
| try{ |
| rSmgr = connect("socket,host=localhost,port=8100"); |
| sdbcx test = new sdbcx(rSmgr); |
| test.createConnection(); |
| test.displayTableProperties(); |
| // now we dispose the connection to close it |
| XComponent xComponent = (XComponent)UnoRuntime.queryInterface(XComponent.class,con); |
| if(xComponent != null) |
| { |
| xComponent.dispose(); |
| System.out.println("Connection disposed!"); |
| } |
| } |
| catch(com.sun.star.uno.Exception e) |
| { |
| System.out.println(e); |
| e.printStackTrace(); |
| } |
| System.exit(0); |
| } |
| public static XMultiServiceFactory connect( String connectStr ) |
| throws com.sun.star.uno.Exception, |
| com.sun.star.uno.RuntimeException, java.lang.Exception |
| { |
| // initial serviceManager |
| XMultiServiceFactory xLocalServiceManager = |
| com.sun.star.comp.helper.Bootstrap.createSimpleServiceManager(); |
| |
| // create a connector, so that it can contact the office |
| Object xUrlResolver = xLocalServiceManager.createInstance( "com.sun.star.bridge.UnoUrlResolver" ); |
| XUnoUrlResolver urlResolver = (XUnoUrlResolver)UnoRuntime.queryInterface( |
| XUnoUrlResolver.class, xUrlResolver ); |
| |
| Object rInitialObject = urlResolver.resolve( "uno:" + connectStr + ";urp;StarOffice.NamingService" ); |
| |
| XNamingService rName = (XNamingService)UnoRuntime.queryInterface( |
| XNamingService.class, rInitialObject ); |
| |
| XMultiServiceFactory xMSF = null; |
| if( rName != null ) { |
| System.err.println( "got the remote naming service !" ); |
| Object rXsmgr = rName.getRegisteredObject("StarOffice.ServiceManager" ); |
| |
| xMSF = (XMultiServiceFactory) |
| UnoRuntime.queryInterface( XMultiServiceFactory.class, rXsmgr ); |
| } |
| |
| return ( xMSF ); |
| } |
| |
| |
| public sdbcx(XMultiServiceFactory rSmgr ) |
| { |
| xORB = rSmgr; |
| } |
| |
| public void createConnection() throws com.sun.star.uno.Exception |
| { |
| // create the Driver with the implementation name |
| Object aDriver = xORB.createInstance("com.sun.star.comp.sdbcx.adabas.ODriver"); |
| // query for the interface |
| com.sun.star.sdbc.XDriver xDriver; |
| xDriver = (XDriver)UnoRuntime.queryInterface(XDriver.class,aDriver); |
| if(xDriver != null) |
| { |
| // first create the needed url |
| String adabasURL = "sdbc:adabas::MYDB0"; |
| // second create the necessary properties |
| com.sun.star.beans.PropertyValue [] adabasProps = new com.sun.star.beans.PropertyValue[] |
| { |
| new com.sun.star.beans.PropertyValue("user",0,"test1",com.sun.star.beans.PropertyState.DIRECT_VALUE), |
| new com.sun.star.beans.PropertyValue("password",0,"test1",com.sun.star.beans.PropertyState.DIRECT_VALUE) |
| }; |
| // |
| |
| // now create a connection to adabas |
| con = xDriver.connect(adabasURL,adabasProps); |
| if(con != null) |
| { |
| System.out.println("Connection could be created!"); |
| // we the XDatabaseDefinitionSupplier interface from the driver to get the XTablesSupplier |
| XDataDefinitionSupplier xDDSup = (XDataDefinitionSupplier)UnoRuntime.queryInterface( |
| XDataDefinitionSupplier.class,xDriver); |
| if(xDDSup != null) |
| { |
| xTabSup = xDDSup.getDataDefinitionByConnection(con); |
| if(xTabSup != null) |
| { |
| XNameAccess xTables = xTabSup.getTables(); |
| // now print all table names |
| System.out.println("Tables available:"); |
| String [] aTableNames = xTables.getElementNames(); |
| for ( int i =0; i<= aTableNames.length-1; i++) |
| System.out.println(aTableNames[i]); |
| } |
| } |
| else |
| System.out.println("The driver is not a SDBCX capable!"); |
| } |
| else |
| System.out.println("Connection could not be created!"); |
| } |
| } |
| |
| public void displayTableProperties() throws com.sun.star.uno.Exception |
| { |
| XNameAccess xTables = xTabSup.getTables(); |
| String [] aTableNames = xTables.getElementNames(); |
| if(0 != aTableNames.length) |
| { |
| Object table = xTables.getByName(aTableNames[0]); |
| XPropertySet xProp = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class,table); |
| System.out.println("Name: " + xProp.getPropertyValue("Name")); |
| System.out.println("CatalogName: " + xProp.getPropertyValue("CatalogName")); |
| System.out.println("SchemaName: " + xProp.getPropertyValue("SchemaName")); |
| System.out.println("Description: " + xProp.getPropertyValue("Description")); |
| // the following property is optional so we first must check if it exists |
| if(xProp.getPropertySetInfo().hasPropertyByName("Type")) |
| System.out.println("Type: " + xProp.getPropertyValue("Type")); |
| } |
| } |
| |
| //########################################################### |
| // 15. example |
| // print all columns of a XColumnsSupplier |
| //########################################################### |
| public static void printColumns(XColumnsSupplier xColumnsSup) throws com.sun.star.uno.Exception,SQLException |
| { |
| System.out.println("Example printColumns"); |
| // the table must be at least support a XColumnsSupplier interface |
| System.out.println("--- Columns ---"); |
| XNameAccess xColumns = xColumnsSup.getColumns(); |
| String [] aColumnNames = xColumns.getElementNames(); |
| for ( int i =0; i<= aColumnNames.length-1; i++) |
| System.out.println(" " + aColumnNames[i]); |
| } |
| //########################################################### |
| // 16. example |
| // print all keys inclusive the columns of a key |
| //########################################################### |
| public static void printKeys(XColumnsSupplier xColumnsSup) throws com.sun.star.uno.Exception,SQLException |
| { |
| System.out.println("Example printKeys"); |
| XKeysSupplier xKeysSup = (XKeysSupplier)UnoRuntime.queryInterface(XKeysSupplier.class,xColumnsSup); |
| if(xKeysSup != null) |
| { |
| System.out.println("--- Keys ---"); |
| XIndexAccess xKeys = xKeysSup.getKeys(); |
| for ( int i =0; i < xKeys.getCount(); i++) |
| { |
| Object key = xKeys.getByIndex(i); |
| XPropertySet xProp = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class,key); |
| System.out.println(" " + xProp.getPropertyValue("Name")); |
| XColumnsSupplier xKeyColumnsSup = ( XColumnsSupplier ) UnoRuntime.queryInterface(XColumnsSupplier.class,xProp); |
| printColumns(xKeyColumnsSup); |
| } |
| } |
| } |
| //########################################################### |
| // 17. example |
| // print all keys inclusive the columns of a key |
| //########################################################### |
| public static void printIndexes(XColumnsSupplier xColumnsSup) throws com.sun.star.uno.Exception,SQLException |
| { |
| System.out.println("Example printIndexes"); |
| XIndexesSupplier xIndexesSup = (XIndexesSupplier)UnoRuntime.queryInterface(XIndexesSupplier.class,xColumnsSup); |
| if(xIndexesSup != null) |
| { |
| System.out.println("--- Indexes ---"); |
| XNameAccess xIndexs = xIndexesSup.getIndexes(); |
| String [] aIndexNames = xIndexs.getElementNames(); |
| for ( int i =0; i<= aIndexNames.length-1; i++) |
| { |
| System.out.println(" " + aIndexNames[i]); |
| Object index = xIndexs.getByName(aIndexNames[i]); |
| XColumnsSupplier xIndexColumnsSup = (XColumnsSupplier)UnoRuntime.queryInterface(XColumnsSupplier.class,index); |
| printColumns(xIndexColumnsSup); |
| } |
| } |
| } |
| |
| //########################################################### |
| // 18. example |
| // column properties |
| //########################################################### |
| public static void printColumnProperties(Object column) throws com.sun.star.uno.Exception,SQLException |
| { |
| System.out.println("Example printColumnProperties"); |
| XPropertySet xProp = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class,column); |
| System.out.println("Name: " + xProp.getPropertyValue("Name")); |
| System.out.println("Type: " + xProp.getPropertyValue("Type")); |
| System.out.println("TypeName: " + xProp.getPropertyValue("TypeName")); |
| System.out.println("Precision: " + xProp.getPropertyValue("Precision")); |
| System.out.println("Scale: " + xProp.getPropertyValue("Scale")); |
| System.out.println("IsNullable: " + xProp.getPropertyValue("IsNullable")); |
| System.out.println("IsAutoIncrement: " + xProp.getPropertyValue("IsAutoIncrement")); |
| System.out.println("IsCurrency: " + xProp.getPropertyValue("IsCurrency")); |
| // the following property is optional so we first must check if it exists |
| if(xProp.getPropertySetInfo().hasPropertyByName("IsRowVersion")) |
| System.out.println("IsRowVersion: " + xProp.getPropertyValue("IsRowVersion")); |
| if(xProp.getPropertySetInfo().hasPropertyByName("Description")) |
| System.out.println("Description: " + xProp.getPropertyValue("Description")); |
| if(xProp.getPropertySetInfo().hasPropertyByName("DefaultValue")) |
| System.out.println("DefaultValue: " + xProp.getPropertyValue("DefaultValue")); |
| } |
| |
| //########################################################### |
| // 19. example |
| // index properties |
| //########################################################### |
| public static void printIndexProperties(Object index) throws com.sun.star.uno.Exception,SQLException |
| { |
| System.out.println("Example printIndexProperties"); |
| XPropertySet xProp = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class,index); |
| System.out.println("Name: " + xProp.getPropertyValue("Name")); |
| System.out.println("Catalog: " + xProp.getPropertyValue("Catalog")); |
| System.out.println("IsUnique: " + xProp.getPropertyValue("IsUnique")); |
| System.out.println("IsPrimaryKeyIndex: " + xProp.getPropertyValue("IsPrimaryKeyIndex")); |
| System.out.println("IsClustered: " + xProp.getPropertyValue("IsClustered")); |
| } |
| |
| //########################################################### |
| // 20. example |
| // key properties |
| //########################################################### |
| public static void printKeyProperties(Object key) throws com.sun.star.uno.Exception,SQLException |
| { |
| System.out.println("Example printKeyProperties"); |
| XPropertySet xProp = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class,key); |
| System.out.println("Name: " + xProp.getPropertyValue("Name")); |
| System.out.println("Type: " + xProp.getPropertyValue("Type")); |
| System.out.println("ReferencedTable: " + xProp.getPropertyValue("ReferencedTable")); |
| System.out.println("UpdateRule: " + xProp.getPropertyValue("UpdateRule")); |
| System.out.println("DeleteRule: " + xProp.getPropertyValue("DeleteRule")); |
| } |
| |
| //########################################################### |
| // 21. example |
| // print all groups and the users with their privileges who belong to this group |
| //########################################################### |
| public static void printGroups(XTablesSupplier xTabSup) throws com.sun.star.uno.Exception,SQLException |
| { |
| System.out.println("Example printGroups"); |
| XGroupsSupplier xGroupsSup = (XGroupsSupplier)UnoRuntime.queryInterface(XGroupsSupplier.class,xTabSup); |
| if(xGroupsSup != null) |
| { |
| // the table must be at least support a XColumnsSupplier interface |
| System.out.println("--- Groups ---"); |
| XNameAccess xGroups = xGroupsSup.getGroups(); |
| String [] aGroupNames = xGroups.getElementNames(); |
| for ( int i =0; i < aGroupNames.length; i++) |
| { |
| System.out.println(" " + aGroupNames[i]); |
| XUsersSupplier xUsersSup = (XUsersSupplier)UnoRuntime.queryInterface(XUsersSupplier.class,xGroups.getByName(aGroupNames[i])); |
| if(xUsersSup != null) |
| { |
| XAuthorizable xAuth = (XAuthorizable)UnoRuntime.queryInterface(XAuthorizable.class,xUsersSup); |
| // the table must be at least support a XColumnsSupplier interface |
| System.out.println("\t--- Users ---"); |
| XNameAccess xUsers = xUsersSup.getUsers(); |
| String [] aUserNames = xUsers.getElementNames(); |
| for ( int j =0; j < aUserNames.length; j++) |
| { |
| System.out.println("\t " + aUserNames[j] + " Privileges: " + xAuth.getPrivileges(aUserNames[j],PrivilegeObject.TABLE)); |
| } |
| } |
| } |
| } |
| } |
| |
| //########################################################### |
| // 22. example |
| // create the table salesmen |
| //########################################################### |
| public static void createTableSalesMen(XNameAccess xTables) throws com.sun.star.uno.Exception,SQLException |
| { |
| System.out.println("Example createTableSalesMen"); |
| XDataDescriptorFactory xTabFac = (XDataDescriptorFactory)UnoRuntime.queryInterface(XDataDescriptorFactory.class,xTables); |
| if(xTabFac != null) |
| { |
| // create the new table |
| XPropertySet xTable = xTabFac.createDataDescriptor(); |
| // set the name of the new table |
| xTable.setPropertyValue("Name","SALESMAN"); |
| // append the columns |
| XColumnsSupplier xColumSup = (XColumnsSupplier)UnoRuntime.queryInterface(XColumnsSupplier.class,xTable); |
| XDataDescriptorFactory xColFac = (XDataDescriptorFactory)UnoRuntime.queryInterface(XDataDescriptorFactory.class,xColumSup.getColumns()); |
| XAppend xAppend = (XAppend)UnoRuntime.queryInterface(XAppend.class,xColFac); |
| // we only need one descriptor |
| XPropertySet xCol = xColFac.createDataDescriptor(); |
| // create first column and append |
| xCol.setPropertyValue("Name","SNR"); |
| xCol.setPropertyValue("Type",new Integer(DataType.INTEGER)); |
| xCol.setPropertyValue("IsNullable",new Integer(ColumnValue.NO_NULLS)); |
| xAppend.appendByDescriptor(xCol); |
| // 2nd only set the properties which differs |
| xCol.setPropertyValue("Name","FIRSTNAME"); |
| xCol.setPropertyValue("Type",new Integer(DataType.VARCHAR)); |
| xCol.setPropertyValue("IsNullable",new Integer(ColumnValue.NULLABLE)); |
| xCol.setPropertyValue("Precision",new Integer(50)); |
| xAppend.appendByDescriptor(xCol); |
| // 3nd only set the properties which differs |
| xCol.setPropertyValue("Name","LASTNAME"); |
| xCol.setPropertyValue("Precision",new Integer(100)); |
| xAppend.appendByDescriptor(xCol); |
| // 4nd only set the properties which differs |
| xCol.setPropertyValue("Name","STREET"); |
| xCol.setPropertyValue("Precision",new Integer(50)); |
| xAppend.appendByDescriptor(xCol); |
| // 5nd only set the properties which differs |
| xCol.setPropertyValue("Name","STATE"); |
| xAppend.appendByDescriptor(xCol); |
| // 6nd only set the properties which differs |
| xCol.setPropertyValue("Name","ZIP"); |
| xCol.setPropertyValue("Type",new Integer(DataType.INTEGER)); |
| xCol.setPropertyValue("Precision",new Integer(10)); // default value integer |
| xAppend.appendByDescriptor(xCol); |
| // 7nd only set the properties which differs |
| xCol.setPropertyValue("Name","BIRTHDATE"); |
| xCol.setPropertyValue("Type",new Integer(DataType.DATE)); |
| xCol.setPropertyValue("Precision",new Integer(10)); // default value integer |
| xAppend.appendByDescriptor(xCol); |
| // now we create the primary key |
| XKeysSupplier xKeySup = (XKeysSupplier)UnoRuntime.queryInterface(XKeysSupplier.class,xTable); |
| XDataDescriptorFactory xKeyFac = (XDataDescriptorFactory)UnoRuntime.queryInterface(XDataDescriptorFactory.class,xKeySup.getKeys()); |
| XAppend xKeyAppend = (XAppend)UnoRuntime.queryInterface(XAppend.class,xKeyFac); |
| XPropertySet xKey = xKeyFac.createDataDescriptor(); |
| xKey.setPropertyValue("Type",new Integer(KeyType.PRIMARY)); |
| // now append the columns to key |
| XColumnsSupplier xKeyColumSup = (XColumnsSupplier)UnoRuntime.queryInterface(XColumnsSupplier.class,xKey); |
| XDataDescriptorFactory xKeyColFac = (XDataDescriptorFactory)UnoRuntime.queryInterface(XDataDescriptorFactory.class,xKeyColumSup.getColumns()); |
| XAppend xKeyColAppend = (XAppend)UnoRuntime.queryInterface(XAppend.class,xKeyColFac); |
| // we only need one descriptor |
| XPropertySet xKeyCol = xKeyColFac.createDataDescriptor(); |
| xKeyCol.setPropertyValue("Name","SNR"); |
| // append the key column |
| xKeyColAppend.appendByDescriptor(xKeyCol); |
| // apend the key |
| xKeyAppend.appendByDescriptor(xKey); |
| // the last step is to append the new table to the tables collection |
| XAppend xTableAppend = (XAppend)UnoRuntime.queryInterface(XAppend.class,xTabFac); |
| xTableAppend.appendByDescriptor(xTable); |
| } |
| } |
| |
| //########################################################### |
| // 23. example |
| // create a user |
| //########################################################### |
| public static void createUser(XNameAccess xUsers) throws com.sun.star.uno.Exception,SQLException |
| { |
| System.out.println("Example createUser"); |
| XDataDescriptorFactory xUserFac = (XDataDescriptorFactory)UnoRuntime.queryInterface(XDataDescriptorFactory.class,xUsers); |
| if(xUserFac != null) |
| { |
| // create the new table |
| XPropertySet xUser = xUserFac.createDataDescriptor(); |
| // set the name of the new table |
| xUser.setPropertyValue("Name","BOSS"); |
| xUser.setPropertyValue("Password","BOSSWIFENAME"); |
| XAppend xAppend = (XAppend)UnoRuntime.queryInterface(XAppend.class,xUserFac); |
| xAppend.appendByDescriptor(xUser); |
| } |
| } |
| } |