|
15 | 15 | */
|
16 | 16 | package org.ops4j.pax.jdbc.sqlite.impl;
|
17 | 17 |
|
| 18 | +import java.sql.Connection; |
18 | 19 | import java.sql.Driver;
|
19 | 20 | import java.sql.SQLException;
|
20 | 21 | import java.util.Properties;
|
|
30 | 31 |
|
31 | 32 | public class SqliteDataSourceFactory implements DataSourceFactory {
|
32 | 33 |
|
33 |
| - @Override |
34 |
| - public DataSource createDataSource(Properties props) throws SQLException { |
35 |
| - SQLiteDataSource dataSource = new SQLiteDataSource(); |
36 |
| - String url = props.getProperty(JDBC_URL); |
37 |
| - if (url == null) { |
38 |
| - dataSource.setUrl("jdbc:sqlite:" + props.getProperty(JDBC_DATABASE_NAME)); |
39 |
| - props.remove(JDBC_DATABASE_NAME); |
40 |
| - } else { |
41 |
| - dataSource.setUrl(url); |
42 |
| - props.remove(JDBC_URL); |
43 |
| - } |
| 34 | + private final class SQLiteDataSourceExtension extends SQLiteDataSource { |
| 35 | + private String username; |
| 36 | + private String password; |
44 | 37 |
|
45 |
| - if (!props.isEmpty()) { |
46 |
| - BeanConfig.configure(dataSource, props); |
47 |
| - } |
48 |
| - return dataSource; |
49 |
| - } |
| 38 | + public SQLiteDataSourceExtension(String username, String password) { |
| 39 | + this.username = username; |
| 40 | + this.password = password; |
| 41 | + } |
50 | 42 |
|
51 |
| - @Override |
| 43 | + @Override |
| 44 | + public Connection getConnection() throws SQLException { |
| 45 | + return super.getConnection(username, password); |
| 46 | + } |
| 47 | + } |
| 48 | + |
| 49 | + @Override |
| 50 | + public DataSource createDataSource(Properties props) throws SQLException { |
| 51 | + String username = removeProperty(props, JDBC_USER); |
| 52 | + String password = removeProperty(props, JDBC_PASSWORD); |
| 53 | + SQLiteDataSource dataSource = new SQLiteDataSourceExtension(username, password); |
| 54 | + if (props != null) { |
| 55 | + String url = props.getProperty(JDBC_URL); |
| 56 | + if (url == null) { |
| 57 | + dataSource.setUrl("jdbc:sqlite:" + props.getProperty(JDBC_DATABASE_NAME)); |
| 58 | + props.remove(JDBC_DATABASE_NAME); |
| 59 | + } else { |
| 60 | + dataSource.setUrl(url); |
| 61 | + props.remove(JDBC_URL); |
| 62 | + } |
| 63 | + if (!props.isEmpty()) { |
| 64 | + BeanConfig.configure(dataSource, props, false); |
| 65 | + } |
| 66 | + } |
| 67 | + return dataSource; |
| 68 | + } |
| 69 | + |
| 70 | + private String removeProperty(Properties props, String property) { |
| 71 | + if (props != null) { |
| 72 | + String value = props.getProperty(property); |
| 73 | + props.remove(property); |
| 74 | + return value; |
| 75 | + } |
| 76 | + return null; |
| 77 | + } |
| 78 | + |
| 79 | + @Override |
52 | 80 | public ConnectionPoolDataSource createConnectionPoolDataSource(Properties props)
|
53 | 81 | throws SQLException {
|
54 |
| - throw new UnsupportedOperationException(); |
| 82 | + throw new SQLException(); |
55 | 83 | }
|
56 | 84 |
|
57 | 85 | @Override
|
58 | 86 | public XADataSource createXADataSource(Properties props) throws SQLException {
|
59 |
| - throw new UnsupportedOperationException(); |
| 87 | + throw new SQLException(); |
60 | 88 | }
|
61 | 89 |
|
62 | 90 | @Override
|
|
0 commit comments