1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski package connectivity.tools; 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski import com.sun.star.container.ElementExistException; 26*b1cdbd2cSJim Jagielski import com.sun.star.container.NoSuchElementException; 27*b1cdbd2cSJim Jagielski import com.sun.star.container.XNameAccess; 28*b1cdbd2cSJim Jagielski import com.sun.star.container.XNameContainer; 29*b1cdbd2cSJim Jagielski import com.sun.star.lang.WrappedTargetException; 30*b1cdbd2cSJim Jagielski import com.sun.star.lang.XSingleServiceFactory; 31*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory; 32*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet; 33*b1cdbd2cSJim Jagielski import com.sun.star.sdb.XQueryDefinitionsSupplier; 34*b1cdbd2cSJim Jagielski import com.sun.star.sdbc.XDataSource; 35*b1cdbd2cSJim Jagielski import com.sun.star.uno.Exception; 36*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 37*b1cdbd2cSJim Jagielski import java.util.logging.Level; 38*b1cdbd2cSJim Jagielski import java.util.logging.Logger; 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski public class DataSource 41*b1cdbd2cSJim Jagielski { 42*b1cdbd2cSJim Jagielski // the service factory 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski private final XMultiServiceFactory m_orb; 45*b1cdbd2cSJim Jagielski private XDataSource m_dataSource; 46*b1cdbd2cSJim Jagielski DataSource(final XMultiServiceFactory _orb, final String _registeredName)47*b1cdbd2cSJim Jagielski public DataSource(final XMultiServiceFactory _orb, final String _registeredName) throws Exception 48*b1cdbd2cSJim Jagielski { 49*b1cdbd2cSJim Jagielski m_orb = _orb; 50*b1cdbd2cSJim Jagielski 51*b1cdbd2cSJim Jagielski final XNameAccess dbContext = UnoRuntime.queryInterface( 52*b1cdbd2cSJim Jagielski XNameAccess.class, _orb.createInstance( "com.sun.star.sdb.DatabaseContext" ) ); 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski m_dataSource = UnoRuntime.queryInterface( XDataSource.class, dbContext.getByName( _registeredName ) ); 55*b1cdbd2cSJim Jagielski } 56*b1cdbd2cSJim Jagielski DataSource(final XMultiServiceFactory _orb,final XDataSource _dataSource)57*b1cdbd2cSJim Jagielski public DataSource(final XMultiServiceFactory _orb,final XDataSource _dataSource) 58*b1cdbd2cSJim Jagielski { 59*b1cdbd2cSJim Jagielski m_orb = _orb; 60*b1cdbd2cSJim Jagielski m_dataSource = _dataSource; 61*b1cdbd2cSJim Jagielski } 62*b1cdbd2cSJim Jagielski getXDataSource()63*b1cdbd2cSJim Jagielski final public XDataSource getXDataSource() 64*b1cdbd2cSJim Jagielski { 65*b1cdbd2cSJim Jagielski return m_dataSource; 66*b1cdbd2cSJim Jagielski } 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski /** 69*b1cdbd2cSJim Jagielski * retrieves the data source's settings 70*b1cdbd2cSJim Jagielski */ geSettings()71*b1cdbd2cSJim Jagielski public XPropertySet geSettings() 72*b1cdbd2cSJim Jagielski { 73*b1cdbd2cSJim Jagielski return UnoRuntime.queryInterface( XPropertySet.class, impl_getPropertyValue( "Settings" ) ); 74*b1cdbd2cSJim Jagielski } 75*b1cdbd2cSJim Jagielski 76*b1cdbd2cSJim Jagielski /** creates a query with a given name and SQL command 77*b1cdbd2cSJim Jagielski */ createQuery(final String _name, final String _sqlCommand)78*b1cdbd2cSJim Jagielski public void createQuery(final String _name, final String _sqlCommand) throws ElementExistException, WrappedTargetException, com.sun.star.lang.IllegalArgumentException 79*b1cdbd2cSJim Jagielski { 80*b1cdbd2cSJim Jagielski createQuery(_name, _sqlCommand, true); 81*b1cdbd2cSJim Jagielski } 82*b1cdbd2cSJim Jagielski 83*b1cdbd2cSJim Jagielski /** creates a query with a given name, SQL command, and EscapeProcessing flag 84*b1cdbd2cSJim Jagielski */ createQuery(final String _name, final String _sqlCommand, final boolean _escapeProcessing)85*b1cdbd2cSJim Jagielski public void createQuery(final String _name, final String _sqlCommand, final boolean _escapeProcessing) throws ElementExistException, WrappedTargetException, com.sun.star.lang.IllegalArgumentException 86*b1cdbd2cSJim Jagielski { 87*b1cdbd2cSJim Jagielski final XSingleServiceFactory queryDefsFac = UnoRuntime.queryInterface( XSingleServiceFactory.class, getQueryDefinitions() ); 88*b1cdbd2cSJim Jagielski XPropertySet queryDef = null; 89*b1cdbd2cSJim Jagielski try 90*b1cdbd2cSJim Jagielski { 91*b1cdbd2cSJim Jagielski queryDef = UnoRuntime.queryInterface( XPropertySet.class, queryDefsFac.createInstance() ); 92*b1cdbd2cSJim Jagielski queryDef.setPropertyValue("Command", _sqlCommand); 93*b1cdbd2cSJim Jagielski queryDef.setPropertyValue("EscapeProcessing", Boolean.valueOf(_escapeProcessing)); 94*b1cdbd2cSJim Jagielski } 95*b1cdbd2cSJim Jagielski catch (com.sun.star.uno.Exception e) 96*b1cdbd2cSJim Jagielski { 97*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 98*b1cdbd2cSJim Jagielski } 99*b1cdbd2cSJim Jagielski 100*b1cdbd2cSJim Jagielski final XNameContainer queryDefsContainer = UnoRuntime.queryInterface( XNameContainer.class, getQueryDefinitions() ); 101*b1cdbd2cSJim Jagielski queryDefsContainer.insertByName(_name, queryDef); 102*b1cdbd2cSJim Jagielski } 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski /** provides the query definition with the given name 105*b1cdbd2cSJim Jagielski */ getQueryDefinition(final String _name)106*b1cdbd2cSJim Jagielski public QueryDefinition getQueryDefinition(final String _name) throws NoSuchElementException 107*b1cdbd2cSJim Jagielski { 108*b1cdbd2cSJim Jagielski final XNameAccess allDefs = getQueryDefinitions(); 109*b1cdbd2cSJim Jagielski try 110*b1cdbd2cSJim Jagielski { 111*b1cdbd2cSJim Jagielski return new QueryDefinition( UnoRuntime.queryInterface( XPropertySet.class, allDefs.getByName( _name) ) ); 112*b1cdbd2cSJim Jagielski } 113*b1cdbd2cSJim Jagielski catch (WrappedTargetException e) 114*b1cdbd2cSJim Jagielski { 115*b1cdbd2cSJim Jagielski } 116*b1cdbd2cSJim Jagielski throw new NoSuchElementException(); 117*b1cdbd2cSJim Jagielski } 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielski /** provides the container of query definitions of the data source 120*b1cdbd2cSJim Jagielski */ getQueryDefinitions()121*b1cdbd2cSJim Jagielski public XNameAccess getQueryDefinitions() 122*b1cdbd2cSJim Jagielski { 123*b1cdbd2cSJim Jagielski final XQueryDefinitionsSupplier suppQueries = UnoRuntime.queryInterface( 124*b1cdbd2cSJim Jagielski XQueryDefinitionsSupplier.class, m_dataSource); 125*b1cdbd2cSJim Jagielski return suppQueries.getQueryDefinitions(); 126*b1cdbd2cSJim Jagielski } 127*b1cdbd2cSJim Jagielski 128*b1cdbd2cSJim Jagielski /** 129*b1cdbd2cSJim Jagielski * retrieves a property value from the data source 130*b1cdbd2cSJim Jagielski * @param i_propertyName 131*b1cdbd2cSJim Jagielski * the name of the property whose value is to be returned. 132*b1cdbd2cSJim Jagielski */ impl_getPropertyValue( final String i_propertyName )133*b1cdbd2cSJim Jagielski private Object impl_getPropertyValue( final String i_propertyName ) 134*b1cdbd2cSJim Jagielski { 135*b1cdbd2cSJim Jagielski Object propertyValue = null; 136*b1cdbd2cSJim Jagielski try 137*b1cdbd2cSJim Jagielski { 138*b1cdbd2cSJim Jagielski final XPropertySet dataSourceProps = UnoRuntime.queryInterface( XPropertySet.class, m_dataSource ); 139*b1cdbd2cSJim Jagielski propertyValue = dataSourceProps.getPropertyValue( i_propertyName ); 140*b1cdbd2cSJim Jagielski } 141*b1cdbd2cSJim Jagielski catch (Exception ex) 142*b1cdbd2cSJim Jagielski { 143*b1cdbd2cSJim Jagielski Logger.getLogger(DataSource.class.getName()).log(Level.SEVERE, null, ex); 144*b1cdbd2cSJim Jagielski } 145*b1cdbd2cSJim Jagielski return propertyValue; 146*b1cdbd2cSJim Jagielski } 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski /** returns the name of the data source 149*b1cdbd2cSJim Jagielski * 150*b1cdbd2cSJim Jagielski * If a data source is registered at the database context, the name is the registration 151*b1cdbd2cSJim Jagielski * name. Otherwise, its the URL which the respective database document is based on. 152*b1cdbd2cSJim Jagielski * 153*b1cdbd2cSJim Jagielski * Note that the above definition is from the UNO API, not from this wrapper here. 154*b1cdbd2cSJim Jagielski */ getName()155*b1cdbd2cSJim Jagielski public String getName() 156*b1cdbd2cSJim Jagielski { 157*b1cdbd2cSJim Jagielski return (String)impl_getPropertyValue( "Name" ); 158*b1cdbd2cSJim Jagielski } 159*b1cdbd2cSJim Jagielski } 160