/*
 * blancoDb Enterprise Edition
 * Copyright (C) 2004-2005 Tosiki Iga
 * 
 * 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.util;

import blanco.db.util.method.ConvertToBlancoExceptionMethod;
import blanco.ig.expander.ClassExpander;
import blanco.ig.expander.Type;
import blanco.ig.expander.Value;
import blanco.ig.expander.method.MethodExpander;

/**
 * blancoDbが共通的に利用するユーティリティクラス。
 * 
 * このクラスが生成するクラスはblancoDbが生成したソースコードで利用されます
 * 
 * @since 2006.03.02
 * @author IGA Tosiki
 */
public class BlancoDbUtilClass extends ClassExpander {
    /**
     * このクラス自身のクラス名
     */
    public static final String CLASS_NAME = "BlancoDbUtil";

    private BlancoDbObjectStorage storage = null;

    public BlancoDbUtilClass(final BlancoDbObjectStorage storage,
            final Type argType) {
        super(argType);
        this.storage = storage;
    }

    protected void expandClassStruct() {
        getJavaDoc().addLine("blancoDbが共通的に利用するユーティリティクラス。");
        getJavaDoc().addLine("");
        getJavaDoc().addLine("このクラスはblancoDbが生成したソースコードで利用されます <br>");
        getJavaDoc().addLine(
                "このクラスは blancoDbが生成したソースコードから利用されます。直接呼び出すことは推奨されません。");
        getJavaDoc().addLine("");
        getJavaDoc().addLine("@since 2006.03.02");
        getJavaDoc().addLine("@author blanco Framework");

        addMethod(new ConvertToBlancoExceptionMethod(storage));

        addMethod(new MethodExpander("convertTimestampToDate") {
            protected boolean isStatic() {
                return true;
            }

            protected boolean isFinal() {
                return true;
            }

            public void setupSignature() {
                getJavaDoc().addLine("JDBCのTimestampをDate型に変換します。");
                getJavaDoc().addLine("");
                getJavaDoc().addLine(
                        "java.sql.Timestamp型からjava.util.Date型へと変換します。<br>");
                getJavaDoc()
                        .addLine(
                                "このメソッドは blancoDbが生成したソースコードから利用されます。直接呼び出すことは推奨されません。");

                getJavaDoc().addParameter("argTimestamp",
                        "JDBCのTimestamp型を与えます。");
                addArgument(new Value(new Type("java.sql.Timestamp"),
                        "argTimestamp"));

                getJavaDoc().addReturn("変換後のjava.util.Date型を戻します。");
                setReturnType(new Type("java.util.Date"));
            }

            public void implement() {
                getData().addLine("if (argTimestamp == null) {");
                getData().addLine("return null;");
                getData().addLine("}");
                getData().addLine("return new Date(argTimestamp.getTime());");
            }
        });
    }
}