    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;
    019// import org.opengion.hayabusa.db.AbstractRenderer;
    020import org.opengion.hayabusa.db.CellRenderer;
    021import org.opengion.hayabusa.db.DBColumn;
    022
    023/**
    024 * RICHLABEL レンデラは、特殊文字のエスケープを元に戻して表示する場合に
    025 * 使用するクラスです。
    026 * readonlyのテキストエリアでname属性は付けません。(データは送信されません)
    027 *
    028 * 属性値に1以上の数値を指定した場合はSLABELと同等の処理を行います。
    029 * その際に、有効なタグについては除外して表示します。（一覧表示用）
    030 *
    031 * カラムの表示に必要な属性は, DBColumn オブジェクト より取り出します。
    032 * このクラスは、DBColumn オブジェクト毎に１つ作成されます。
    033 *
    034 * @og.rev 5.9.33.0 (2018/06/01) 新規作成
    035 * @og.rev 5.10.1.0 (2018/06/29) IGNORE_STRに値を追加。
    036 * @og.group データ編集
    037 *
    038 * @version  5.9.33.0
    039 * @author   T.OTA
    040 * @since    JDK7.0,
    041 */
    042// public class Renderer_RICHLABEL extends AbstractRenderer {
    043public class Renderer_RICHLABEL extends Renderer_SLABEL {
    044        /** このプログラムのVERSION文字列を設定します。   {@value} */
    045        private static final String VERSION = "7.0.1.2 (2018/11/04)" ;
    046
    047        private static final CellRenderer DB_CELL = new Renderer_RICHLABEL();
    048
    049        // 2018/06/28 MODIFY pre,img,table,thead,tbody,tr,th,td,ul,li,h[数値]を追加
    050//      private static final String IGNORE_STR = "strong|font|a|br|p|span|div";
    051        private static final String IGNORE_STR = "strong|font|a|br|p|span|div|pre|img|table|thead|tbody|tr|th|td|ul|li|h\\d";
    052
    053        // 7.0.1.2 (2018/11/04) Renderer_RICHLABELか、Renderer_SLABEL の判定用ﾌﾗｸﾞ
    054        private final boolean isRichLabel ;
    055
    056        /**
    057         * デフォルトコンストラクター。
    058         * このコンストラクターで、基本オブジェクトを作成します。
    059         *
    060         */
    061        public Renderer_RICHLABEL() {
    062                super();
    063                isRichLabel = true;
    064        }
    065
    066        /**
    067         * DBColumnオブジェクトを指定したprivateコンストラクター。
    068         *
    069         * @og.rev 7.0.1.2 (2018/11/04) 出力文字数指定対応
    070         *
    071         * @param       size    カットサイズ
    072         */
    073        private Renderer_RICHLABEL( final String size ) {
    074                super( size );
    075                isRichLabel = false;
    076        }
    077
    078        /**
    079         * 各オブジェクトから自分のインスタンスを返します。
    080         * 自分自身をキャッシュするのか、新たに作成するのかは、各サブクラスの実装に
    081         * まかされます。
    082         *
    083         * 属性値に1以上の数値を指定した場合はSLABELと同等の処理を行います。
    084         * その際に、有効なタグについては除外して表示します。（一覧表示用）
    085         *
    086         * @og.rev 5.10.4.2 (2018/10/19) 出力文字数指定対応
    087         *
    088         * @param       clm     DBColumnオブジェクト
    089         *
    090         * @return      CellEditorオブジェクト
    091         */
    092        @Override
    093        public CellRenderer newInstance( final DBColumn clm ) {
    094//              return DB_CELL;
    095                // return dbCell;
    096                final String param = clm.getRendererParam();
    097
    098                if( param != null && param.length() > 0 && !"0".equals( param ) ) {             // 1以上の数値 → 0以外の数値
    099                        return new Renderer_RICHLABEL( param );                                                         // カットサイズ指定 のインスタンス
    100                }
    101                else {
    102                        return DB_CELL;
    103                }
    104        }
    105
    106        /**
    107         * データの表示用文字列を返します。
    108         *
    109         * @param   value 入力値
    110         *
    111         * @return  データの表示用文字列
    112         */
    113        @Override
    114        public String getValue( final String value ) {
    115//              return StringUtil.escapeFilter( value,IGNORE_STR );
    116
    117                final String escStr = StringUtil.escapeFilter( value,IGNORE_STR );
    118
    119                return isRichLabel ? escStr : super.getValue( escStr );
    120        }
    121}