/* * Copyright 2004-2005 the original author or authors. * * Licensed 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. */ /** * Gant script that loads the Grails console * * @author Graeme Rocher * * @since 0.4 */ import org.codehaus.groovy.grails.support.* includeTargets << grailsScript("_GrailsBootstrap") target ('default': "Load the Grails interactive Swing console") { depends( checkVersion, configureProxy, packageApp, classpath) console() } target(console:"The console implementation target") { // classLoader = new URLClassLoader([classesDir.toURI().toURL()] as URL[], rootLoader) // Thread.currentThread().setContextClassLoader(classLoader) loadApp() configureApp() try { def console = createConsole() console.run() // On each monitor check, determine whether the console window // is still open. If not, we set the monitor flag so that its // thread ends and the script completes. monitorCheckCallback = { if (!console.frame.visible) keepMonitoring = false } // If the app is recompiled, we close the console and start it // up again with the new classes. monitorRecompileCallback = { println "Exiting console" console.exit() String scriptText = console.inputArea.text createConsole() println "Restarting console" console.run() console.inputArea.addFocusListener(new ConsoleFocusListener(text:scriptText)) } // Start the monitor thread. monitorApp() //while(true) { sleep(Long.MAX_VALUE) } } catch (Exception e) { event("StatusFinal", ["Error starting console: ${e.message}"]) } } createConsole = { def b = new Binding() b.ctx = appCtx b.grailsApplication = grailsApp def console = new groovy.ui.Console(grailsApp.classLoader, b) console.beforeExecution = { appCtx.getBeansOfType(PersistenceContextInterceptor).each { k,v -> v.init() } } console.afterExecution = { appCtx.getBeansOfType(PersistenceContextInterceptor).each { k,v -> v.flush() v.destroy() } } return console } class ConsoleFocusListener implements java.awt.event.FocusListener{ String text void focusGained(java.awt.event.FocusEvent e){ e.source.text = text e.source.removeFocusListener(this) } void focusLost(java.awt.event.FocusEvent e){} }