Groovyでささっと書いたSQLを簡単に整形(クリップボード連携機能付き)

2019-01-24Groovy

はじめに

コーディングしたSQLを整形するツールはたくさんありますが、今回はフリーのJavaライブラリを使用して整形してみました。

前提情報

以下のJavaライブラリを利用しました。

機能

  1. クリップボードからSQLを抜き出します。
  2. 抜き出したSQLを整形します。
  3. 再度クリップボードに反映します。

ソースコード

GClipBoard.groovy

クリップボード操作用のクラスを作りました。

import java.awt.Toolkit
import java.awt.datatransfer.Clipboard
import java.awt.datatransfer.DataFlavor
import java.awt.datatransfer.StringSelection
import java.awt.datatransfer.Transferable
import java.awt.datatransfer.UnsupportedFlavorException
import java.io.IOException

/**
 * @author genzou
 *
 * クリップボード情報を管理するクラスです。
 */
public class GClipBoard {
    /** クリップボード */
    def clipboard = Toolkit.getDefaultToolkit().getSystemClipboard()

    /**
     * クリップボードに、文字列をセットします。
     *
     * @param sendStr
     *            セットする文字列
     */
    public void setText(sendStr) {

        def ss = new StringSelection(sendStr)
        clipboard.setContents(ss, ss)
    }

    /**
     * クリップボードに含まれている文字列を取り出します。
     *
     * @return String 取得した文字列
     */
    public getText() {

        Transferable recive = clipboard.getContents(null)

        def recieveStr = null

        try {
            recieveStr = (String) recive.getTransferData(DataFlavor.stringFlavor)
        } catch (UnsupportedFlavorException e) {
            recieveStr = ""
        } catch (IOException e) {
            recieveStr = ""
        }
        return recieveStr
    }
}

arraignmentSql.groovy

こちらがコマンドラインから叩くフックポイント用のスクリプト。

import blanco.commons.sql.format.BlancoSqlFormatter
import blanco.commons.sql.format.BlancoSqlRule

clip = new GClipBoard()

def formatter = new BlancoSqlFormatter(new BlancoSqlRule())

clip.text = formatter.format(clip.text)

使い方

コマンドラインから以下のように実行します。
2点注意。

  • GClipBoard.groovy を環境変数 $CLASSPATH の通ったディレクトリに配置
  • Javaライブラリ blancosqlformatter-0.0.4.jar に環境変数 $CLASSPATH を通す

環境変数 $CLASSPATH の設定が面倒な場合は、 -cp オプションを設定しても構いません。

$ groovy -cp .:blancoSqlFormatter/blancosqlformatter-0.0.4.jar arraignmentSql.groovy

ひとこと

最近はGrailsが楽しくて仕方ないです。Railsでは、あんなに簡単にWEBシステムの開発ができていたんでしょうね!

Grailsの投稿もしたい。

2019-01-24Groovy