Thursday, November 24, 2011

Spread-dot, a Terse Syntax for Collect or Each

List foo = ['a','bc']
assert (foo*.size() == foo.collect{it.size()})
// *. is basically a super terse syntax for .collect -- i.e. call exactly one operation on each 'it'
// also, if you don't want to save the results, * is basically a super terse .each
threads*.join()

Read Lines in Zip File's (File) Entries

//to read a file:

import java.io.*;
import java.util.*;
import java.util.zip.*;

String fname = "C:\\test.zip"

ZipFile zf = new ZipFile(fname)

zf.entries().each { entry ->
    if (!entry.directory) {
        String entryFileName = entry.name
        println entryFileName
        InputStream inp = zf.getInputStream(entryFileName);
        inp.eachLine { line -> println line }
    }
}

//to write a file:
new AntBuilder().zip(destfile:"zipped.zip", basedir=".", excludes="lib .svn plugins *.class")
//http://groovy-almanac.org/creating-a-zipfile-with-antbuilder/

Thursday, November 17, 2011

Class, @Delegate

class A { String doIt() {println 'do A'} }

class B { String doIt() {println 'do B'} }

def pc = { println ( (it == A ? '' : 'x: ') + it.getName()) }

pc(A)
pc(B) //fail
pc(A1) //fail

def a = new A()
pc(a.getClass())


class A1 extends A { 
    @Delegate B b = new B()
    @Delegate A a = new A() // red herring
}

class C { 
    @Delegate B b = new B()
    @Delegate A a = new A() // red herring
}


def a1 = new A1()
a1.doIt() // do A

def c = new C()
c.doIt() // do B

Monday, November 7, 2011

Command line input


def input = System.console().&readLine
def pwd = System.console().&readPassword

String username = input("username: ");
String password = pwd("password: ");

Wednesday, November 2, 2011

Groovy for Java -- Tutorial #5: Closures

Download it HERE or HERE




Groovy for Java -- Tutorial #4: Lists and Maps

Download it HERE or HERE




Groovy for Java -- Tutorial #3: Scripts and Beans

Download it HERE or HERE




Groovy for Java -- Tutorial #2: Hello World!

Download it HERE or HERE