/** * Create a database connection * * @param driver * String name of the driver to use * @param url * String name of the url used to create the connection. * * @return IDatabaseConnection for the given parameters */ @GET @Path( "/createDatabaseConnection" ) @Produces( { APPLICATION_JSON } ) @Facet( name = "Unsupported" ) public IDatabaseConnection createDatabaseConnection( @QueryParam( "driver" ) String driver, @QueryParam( "url" ) String url ) { for ( IDatabaseDialect dialect : dialectService.getDatabaseDialects() ) { if ( dialect.getNativeDriver() != null && dialect.getNativeDriver().equals( driver ) ) { if ( dialect.getNativeJdbcPre() != null && url.startsWith( dialect.getNativeJdbcPre() ) ) { return dialect.createNativeConnection( url ); } } } // if no native driver was found, create a custom dialect object. IDatabaseConnection conn = genericDialect.createNativeConnection( url ); conn.getAttributes().put( GenericDatabaseDialect.ATTRIBUTE_CUSTOM_DRIVER_CLASS, driver ); return conn; }
/** * Will resolve a database type based on the prefix of the jdbc URL, which we assume originated from one of these * classes * * @param urlPrefix * @return */ private IDatabaseType resolveDatabaseType( String urlPrefix ) { DatabaseDialectService databaseDialectService = new DatabaseDialectService( false ); List<IDatabaseDialect> databaseDialects = databaseDialectService.getDatabaseDialects(); String nativePre = null; for ( IDatabaseDialect databaseDialect : databaseDialects ) { // // NOTE - The GenericDatabaseDialect and the AccessDatabaseDialect // both return null for the value of getNativeJdbcPre - so - this // requires a null-check. // // MB // nativePre = databaseDialect.getNativeJdbcPre(); if ( ( nativePre != null ) && ( nativePre.startsWith( urlPrefix ) ) ) { return databaseDialect.getDatabaseType(); } } return null; }