    001/*
    002 * Copyright (c) 2009 The openGion Project.
    003 *
    004 * Licensed under the Apache License, Version 2.0 (the "License");
    005 * you may not use this file except in compliance with the License.
    006 * You may obtain a copy of the License at
    007 *
    008 *     http://www.apache.org/licenses/LICENSE-2.0
    009 *
    010 * Unless required by applicable law or agreed to in writing, software
    011 * distributed under the License is distributed on an "AS IS" BASIS,
    012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
    013 * either express or implied. See the License for the specific language
    014 * governing permissions and limitations under the License.
    015 */
    016package org.opengion.plugin.column;
    017
    018import org.opengion.fukurou.util.StringUtil;
    019import org.opengion.hayabusa.db.AbstractRenderer;
    020import org.opengion.hayabusa.db.CellRenderer;
    021import org.opengion.hayabusa.db.DBColumn;
    022
    023/**
    024 * MONEY レンデラーは、カラムのデータを金額表示する場合に使用するクラスです。
    025 *
    026 * マイナス時の表示は、id="minus" をキーに CSSファイルで指定しています。
    027 * 通貨は、標準では、￥ですが、値:記号 という形式で指定すれば、各値ごとに
    028 * 通貨を指定できます。(ただし、通貨変換は、サポートしていません。)
    029 * 負数の場合はspanタグclass="minus"を付けて出力します。
    030 *
    031 *  カラムの表示に必要な属性は, DBColumn オブジェクト より取り出します。
    032 * このクラスは、DBColumn オブジェクト毎に１つ作成されます。
    033 *
    034 * @og.group データ表示
    035 * @og.rev 5.4.3.6 (2012/01/19) コメント修正
    036 *
    037 * @version  4.0
    038 * @author       Kazuhiko Hasegawa
    039 * @since    JDK5.0,
    040 */
    041public class Renderer_MONEY extends AbstractRenderer {
    042        //* このプログラムのVERSION文字列を設定します。   {@value} */
    043        private static final String VERSION = "5.6.2.3 (2013/03/22)" ;
    044
    045        private static final CellRenderer[] dbCell = {
    046                                                        new Renderer_MONEY(),
    047                                                        new Renderer_MONEY(1),
    048                                                        new Renderer_MONEY(2)
    049        };
    050
    051        private final int        minFraction;
    052        private final String noDisplayVal ;             // 5.6.2.3 (2013/03/22)
    053
    054        /**
    055         * デフォルトコンストラクター。
    056         * このコンストラクターで、基本オブジェクトを作成します。
    057         *
    058         * @og.rev 3.1.1.1 (2003/04/03) 各オブジェクトから自分のインスタンスを返すファクトリメソッドを追加。
    059         * @og.rev 3.3.0.0 (2003/06/23) 初期値設定追加。
    060         * @og.rev 5.6.2.3 (2013/03/22) noDisplayVal 変数初期化
    061         *
    062         */
    063        public Renderer_MONEY() {
    064                minFraction  = 0;
    065                noDisplayVal = null;            // 5.5.1.0 (2012/04/03)
    066        }
    067
    068        /**
    069         * コンストラクター。
    070         *
    071         * @og.rev 3.1.1.1 (2003/04/03) 各オブジェクトから自分のインスタンスを返すファクトリメソッドを追加。
    072         * @og.rev 3.3.0.0 (2003/06/23) 初期値設定追加。NumberFormatクラスは、廃止します。
    073         * @og.rev 5.6.2.3 (2013/03/22) noDisplayVal 変数追加
    074         *
    075         * @param       size    小数点
    076         */
    077        private Renderer_MONEY( final int size ) {
    078                minFraction  = size ;
    079                noDisplayVal = null;            // 5.5.1.0 (2012/04/03)
    080        }
    081
    082        /**
    083         * 各オブジェクトから自分のインスタンスを返します。
    084         * 自分自身をキャッシュするのか、新たに作成するのかは、各サブクラスの実装に
    085         * まかされます。
    086         *
    087         * @og.rev 3.1.1.1 (2003/04/03) 各オブジェクトから自分のインスタンスを返すファクトリメソッドを追加。
    088         * @og.rev 3.1.2.1 (2003/04/10) synchronized を、削除します。
    089         *
    090         * @param       clm     DBColumnオブジェクト
    091         *
    092         * @return      CellRendererオブジェクト
    093         */
    094        public CellRenderer newInstance( final DBColumn clm ) {
    095                int size = clm.getSizeY();
    096                if( size < dbCell.length ) { return dbCell[size]; }
    097                return new Renderer_MONEY( size );
    098        }
    099
    100        /**
    101         * データの表示用文字列を返します。
    102         *
    103         * 引数の値が、『数字型文字列:通貨』という値を渡すことで、通貨を
    104         * 頭につけて通貨ごとに異なる値を表示させることができる。
    105         *
    106         * @og.rev 3.1.0.0 (2003/03/20) 内部に、DBColumn オブジェクトをキープしないように変更
    107         * @og.rev 3.3.0.0 (2003/06/23) NumberFormatクラスは、廃止します。
    108         * @og.rev 5.6.2.3 (2013/03/22) noDisplayVal 変数追加
    109         *
    110         * @param       value 入力値
    111         *
    112         * @return      データの表示用文字列
    113         */
    114        @Override
    115        public String getValue( final String value ) {
    116                // 5.6.2.3 (2013/03/22) noDisplayVal 変数追加
    117                if( noDisplayVal != null && noDisplayVal.equalsIgnoreCase( value ) ) { return "" ; }
    118
    119                String rtn ;
    120                if( value == null || (value.trim()).length() == 0 ) {
    121                        rtn = "0" ;
    122                }
    123                else {
    124                        rtn = value;
    125                }
    126
    127                boolean minus = false ;
    128                if( rtn.charAt( 0 ) == '-' ) {
    129                        minus = true;
    130                        rtn   = rtn.substring( 1 );
    131                }
    132
    133                String tuuka = "￥";
    134                int taniPos = rtn.indexOf( ':' );
    135                if( taniPos >= 0 ) {
    136                        tuuka = rtn.substring( taniPos+1 );
    137                        rtn   = rtn.substring( 0,taniPos );
    138                }
    139
    140                rtn = tuuka + StringUtil.numberFormat( rtn,minFraction ) + "-";
    141
    142                if( minus ) {
    143                        rtn = "<span class=\"minus\">-" + rtn + "</span>";
    144                }
    145                return rtn;
    146        }
    147}