comparison init.gradle @ 174:e949e86b570e

add databaseDrop|Create tasks for managing environment psql databases
author smith@nwoca.org
date Wed, 17 Sep 2014 22:05:37 +0100
parents 50db7a832af5
children c3b7af90d1e4
comparison
equal deleted inserted replaced
173:50db7a832af5 174:e949e86b570e
1 import groovy.sql.*
1 2
2 gradle.ext.ssdtDevelkitLocation = gradle.ext.has('ssdtDevelkitLocation') ? gradle.ssdtDevelkitLocation : 'http://hg.ssdt-ohio.org/browse/public/develkit' 3 gradle.ext.ssdtDevelkitLocation = gradle.ext.has('ssdtDevelkitLocation') ? gradle.ssdtDevelkitLocation : 'http://hg.ssdt-ohio.org/browse/public/develkit'
3 4
4 ant.property(file: System.getProperty('user.home') + "/.ssdt/private.properties") 5 ant.property(file: System.getProperty('user.home') + "/.ssdt/private.properties")
5 gradle.ext.ivyUserDir = ant.properties['ivy.default.ivy.user.dir'] ?: System.getProperty('user.home') + "/.ivy2" 6 gradle.ext.ivyUserDir = ant.properties['ivy.default.ivy.user.dir'] ?: System.getProperty('user.home') + "/.ivy2"
238 } 239 }
239 } 240 }
240 } 241 }
241 } 242 }
242 243
244 if (gradle.hasProperty('environmentDatabase')) {
245 tasks.addRule("Pattern: database{Drop|Create}...: drops or creates the environment's database") { String taskName ->
246 if(taskName.startsWith('database') && (taskName.contains('Drop') || taskName.contains('Create')) ) {
247 task(taskName) {
248 doLast {
249 def dropIt = taskName.contains("Drop")
250 def createIt = taskName.contains("Create")
251 def driverName = gradle.environmentDatabase.jdbc.driverClassName
252 def databaseUrl = gradle.environmentDatabase.jdbc.url
253 if (driverName != "org.postgresql.Driver") {
254 logger.info "skipping database operation for non-postgresql driver"
255 throw new StopActionException("driver $driverName not supported by $taskName")
256 }
257 if (!configurations.hasProperty('jdbcdriver')) {
258 throw new GradleException("databaseDrop requires a 'jdbcdriver' configuration with a postgresql (or other) driver" )
259 }
260 configurations.jdbcdriver.each {File file ->
261 GroovyObject.class.classLoader.addURL(file.toURL())
262 }
263 Class.forName(driverName)
264 def url = new URI(databaseUrl.substring(5))
265 def jdbcBaseUrl = databaseUrl - url.path
266 def databaseName = url.path - "/"
267 def adminUrl = jdbcBaseUrl + "/postgres"
268 def sql = Sql.newInstance(adminUrl,
269 gradle.environmentDatabase.jdbc.username,
270 gradle.environmentDatabase.jdbc.password,
271 driverName)
272 if (dropIt) {
273 logger.info "dropping $databaseName (if exists) from $adminUrl"
274 sql.execute 'DROP DATABASE IF EXISTS "' + databaseName + '";'
275 }
276
277 if (createIt) {
278 logger.info "Creating database $databaseName at $adminUrl"
279 sql.execute 'CREATE DATABASE "' + databaseName + '";'
280 }
281 }
282 }
283
284 }
285 }
286 }
243 287
244 } 288 }
245 289
246 290
247 class ArtifactoryGradleSettings extends BuildAdapter implements BuildListener { 291 class ArtifactoryGradleSettings extends BuildAdapter implements BuildListener {