/*
 * blancoDb
 * Copyright (C) 2004-2005 Yasuo Nakanishi
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 */
package blanco.db.expander.query;

import blanco.commons.util.BlancoJavaSourceUtil;
import blanco.db.util.BlancoDbQueryParserUtil;
import blanco.ig.expander.Type;
import blanco.ig.expander.implementor.Implementor;
import blanco.ig.expander.implementor.StringLiteral;
import blanco.ig.expander.method.MethodExpander;

/**
 * @author Yasuo Nakanishi
 */
public class GetQueryMethod extends MethodExpander {
    private String _query = "";

    public GetQueryMethod(final String query) {
        super("getQuery");
        _query = query;
    }

    public void setupSignature() {
        // getQueryはpublicに変更。
        setReturnType(new Type(String.class));

        getJavaDoc().addLine("SQL定義書で与えられたSQL文を取得します。");
        getJavaDoc().addLine("");
        getJavaDoc()
                .addLine(
                        "SQL入力パラメータとして #キーワードによる指定がある場合には、該当箇所を ? に置き換えた後の SQL文が取得できます。");
        getJavaDoc().addReturn("JDBCドライバに与えて実行可能な状態のSQL文。");
    }

    public void implement() {
        final Implementor implementor = new Implementor(getData());

        // 2005.04.15 t.iga 改行は改行として出力するように変更。
        // 2005.10.12 t.iga blancoCommonsの変換ユーティリティを利用するように変更。
        final String escapedQuery = BlancoJavaSourceUtil
                .escapeStringAsJavaSource(_query);

        // TODO: クエリの #パラメータの?への変換は適切に処理すべきです。現在は仮で旧バージョンを利用。
        final String actualSql = new BlancoDbQueryParserUtil(escapedQuery)
                .getNaturalSqlString();

        implementor.addReturn(new StringLiteral(actualSql));
    }
}