Skip to content

Instantly share code, notes, and snippets.

View jimwhite's full-sized avatar

Jim White jimwhite

View GitHub Profile
def dat = ['NCC_TEST': [1234, 1345, 1232, 1133, 1100], 'NCC_TEST2': [9999,8765, 4321]]
println """update tablename set IsEnriched = 999 where ${
dat.collect { name, serials ->
"(ServerName = '$name' and ServerSerial in (${ serials.join(', ') }))"
}.join(" or ")
}"""
@jimwhite
jimwhite / SyntheticClassTest.groovy
Last active August 29, 2015 14:06
Synthetic class in Groovy using compiler API.
// Fixed synthetic class snippet originally from <[email protected]>.
import groovyjarjarasm.asm.Opcodes
import org.codehaus.groovy.ast.*
import org.codehaus.groovy.ast.expr.*
import org.codehaus.groovy.control.*
import org.codehaus.groovy.tools.GroovyClass
CompilationUnit compilationUnit = new CompilationUnit()
def evaluator = new CachingEvaluator()
assert evaluator.evaluate("1 + 2 * 3") == 7
assert evaluator.evaluate("1 + 2 * ${3}") == 7
assert evaluator.evaluate(new String("1 + 2 * 3")) == 7
assert evaluator.compiledScriptClasses.size() == 1
class CachingEvaluator {
GroovyShell shell = new GroovyShell()
// Bind 'out' variable to redirect script printing methods.
out = new StringWriter()
// Child script inherits our bindings, including 'out'.
// def result = evaluate(new File('TargetScript.groovy'))
def result = evaluate '''
def a = 42
println "The answer is $a."
a ** 2
'''
package groovyx.cli;
import groovy.lang.Binding;
import groovy.lang.MissingPropertyException;
import groovy.lang.Script;
import java.util.HashMap;
import java.util.Map;
/**
@jimwhite
jimwhite / GatherClassBytecode.groovy
Last active August 29, 2015 13:56
A GroovyClassLoader that gathers up the bytecode that defines the classes it has compiled.
import org.codehaus.groovy.ast.ClassNode
import org.codehaus.groovy.control.CompilationUnit
import org.codehaus.groovy.control.SourceUnit
class MyGroovyClassLoader extends GroovyClassLoader {
MyGroovyClassLoader(ClassLoader parent) { super(parent) }
Map bytecodes = [:]
class MyClassCollector extends GroovyClassLoader.ClassCollector {
protected MyClassCollector(GroovyClassLoader.InnerLoader cl, CompilationUnit unit, SourceUnit su) {
@jimwhite
jimwhite / gum.groovy
Last active August 29, 2015 13:56
A Groovy solution for the Ninth Annual ICFP <http://www.boundvariable.org/task.shtml> by Jim White.
// A Groovy solution for the Ninth Annual ICFP <http://www.boundvariable.org/task.shtml> by Jim White.
import groovy.transform.CompileStatic
import java.nio.ByteBuffer
UM.load(new File(args[0])).spin(0)
@CompileStatic
final class UM {
@jimwhite
jimwhite / whats_new.groovy
Last active December 29, 2015 03:39
A script that reports what lines of the input file(s) are new since the last time the script was run. Uses Lucene to maintain an index of the lines. This code just indexes the entire line, but of course if there are key fields then they can be extracted using whatever method you like (including using a Lucene Analyzer).
#!/usr/bin/env groovy
@Grab(group='org.apache.lucene', module='lucene-analyzers-common', version='4.5.1')
import org.apache.lucene.analysis.standard.StandardAnalyzer
import org.apache.lucene.document.Document
import org.apache.lucene.document.Field
import org.apache.lucene.index.DirectoryReader
import org.apache.lucene.index.IndexWriter
import org.apache.lucene.index.IndexWriterConfig
import org.junit.Test
import javax.script.Bindings
class Tests
{
@Test
def void testSP()
{
def p = new Foo()
@jimwhite
jimwhite / GroupAndSum.groovy
Last active December 20, 2015 04:58
Group and total a list of values and display it in a Swing table.
import groovy.swing.SwingBuilder
import javax.swing.JTable
import javax.swing.table.AbstractTableModel
import javax.swing.table.TableModel
class MyTableModel extends AbstractTableModel {
List<List> queryResult
int getRowCount() { queryResult.size() }
int getColumnCount() { queryResult[0].size() }