Skip to content

Instantly share code, notes, and snippets.

@stachjankowski
Last active September 29, 2015 21:34
Show Gist options
  • Save stachjankowski/a52865134108f31457f6 to your computer and use it in GitHub Desktop.
Save stachjankowski/a52865134108f31457f6 to your computer and use it in GitHub Desktop.
Extracting SQL from .jasper (JasperReport).
import java.io.{FileInputStream, ObjectInputStream, File}
import net.sf.jasperreports.engine.JasperReport
object JasperReportQueries {
class JasperReportQueriesExtractor(file: File) {
val report = new ObjectInputStream(new FileInputStream(file))
.readObject.asInstanceOf[JasperReport]
def getTextQueries = getQueries map(_.getText)
def getQueries = getMainQuery.toList ++ getDataSetQueries
def getMainQuery = Option(report.getQuery)
def getDataSetQueries = getDataSets map(_.getQuery)
def getDataSets = Option(report.getDatasets).toSeq.flatten
}
def apply(file: File): Seq[String] = new JasperReportQueriesExtractor(file).getTextQueries
}
import java.io.File
object Main extends App {
override def main(args: Array[String]) =
args.headOption map (new File(_)) match {
case Some(file) => JasperReportQueries(file).foreach(println)
case None => usage()
}
def usage() = println("Usage: java -jar ./JasperSQLExtractor.jar some_report.jasper")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment