package jp.co.y_net.amm.common;

import jp.co.y_net.amm.dao.Localestring;
import jp.co.y_net.amm.dao.LocalestringDao;
import jp.co.y_net.amm.service.LocaleStringSearch;

import org.apache.commons.lang.StringUtils;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;

/**
 * 運用中に変わる可能性のあるメッセージの取得を行う。
 * 
 * 
 * 
 * 
 * 通常の利用
 * 　引数 initialString に画面に表示した文字列を設定する。
 * 　プログラムは自動的に、このメッセージをデータベースへ登録する。
 * 　二回目以降の呼び出しでは、initialString とは関係なく、データベースに登録された値を取得する。
 * 
 * メッセージの変更
 * 　1.データベース（localestring）に登録されている値を修正する。
 * 　2.ダッシュボードからキャッシュクリアを実行する。
 * 
 * @author k_inaba
 */
public class AppLabel extends Label{
    
    @SpringBean(name="localestringDao")
    private LocalestringDao localestringDao;
    
    @SpringBean(name="localeStringSearch")
    private LocaleStringSearch ls;

    
    public AppLabel(String id) {
        super(id);
    }
    public AppLabel(String screenId, String id, String initialString) {
        super(id);
        String controlid = id;
        String message = ls.getDisplayString(screenId, controlid, 0, "");
        if(StringUtils.isEmpty(message)) {
            /* まだ登録されていない文字列なので 登録する */
            Localestring newItem = new Localestring();
            newItem.setScreenid(screenId);
            newItem.setControlid(controlid);
            newItem.setPrintstring(initialString);
            newItem.setLanguageid(0);
            newItem.setNum("");
            localestringDao.add(newItem);
            /* LocaleStringSearchのキャッシュをクリアして再取得する */
            ls.clearCash();
            message = ls.getDisplayString("", controlid, 0, "");
        }
        this.setDefaultModel(Model.of(message));
    }

    public static AppLabel of(String screenId, String id, String def) {
        return new AppLabel(screenId, id, def);
    }


}
