    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.hayabusa.db;
    017
    018import org.opengion.hayabusa.common.HybsSystem;
    019import org.opengion.fukurou.system.HybsConst ;                                  // 6.1.0.0 (2014/12/26)
    020import org.opengion.fukurou.util.Attributes;
    021import org.opengion.fukurou.util.TagBuffer;
    022
    023import static org.opengion.fukurou.util.StringUtil.isNull;              // 6.1.0.0 (2014/12/26)
    024
    025/**
    026 * CellEditor の具象クラスで、カラムのデータを編集する場合に使用するクラスです。
    027 *
    028 *  カラムの表示に必要な属性は, DBColumn オブジェクト より取り出します。
    029 * このクラスは、DBColumn オブジェクト毎に１つ作成されます。
    030 *
    031 * @og.group データ編集
    032 *
    033 * @version  4.0
    034 * @author       Kazuhiko Hasegawa
    035 * @since    JDK5.0,
    036 */
    037public abstract class AbstractEditor implements CellEditor {
    038        private final int COLUMNS_MAXSIZE = HybsSystem.sysInt( "HTML_COLUMNS_MAXSIZE" ) ;       // 表示フィールドの大きさ
    039        // 3.5.4.7 (2004/02/06) viewタグで表示する場合のカラムの大きさ
    040        private final int VIEW_COLUMNS_MAXSIZE = HybsSystem.sysInt( "HTML_VIEW_COLUMNS_MAXSIZE" ) ;
    041
    042        /** システムの改行コードを設定します。*/
    043        protected static final String CR                 = HybsConst.CR;                        // 6.1.0.0 (2014/12/26) refactoring
    044        /** StringBilderなどの初期値を設定します。   {@value} */
    045        protected static final int BUFFER_MIDDLE = HybsConst.BUFFER_MIDDLE;     // 6.1.0.0 (2014/12/26) refactoring
    046
    047        // 3.3.1.1 (2003/07/03) name , attributes 属性を final にする。
    048        /** attributes 属性 */
    049        protected  Attributes   attributes ;            // SubClass で誤って new することを防止
    050
    051        // 6.4.4.2 (2016/04/01) size1,size2,name,tagBuffer をfinal化します。
    052        /** 実数桁数 */
    053        protected  final String         size1            ;
    054        /** 小数点桁数 */
    055        protected  final String         size2            ;
    056        /** 名前 */
    057        protected  final String         name             ;
    058        /** タグバッファー */
    059        protected  final TagBuffer      tagBuffer = new TagBuffer() ;
    060
    061        /**
    062         * デフォルトコンストラクター。
    063         * このコンストラクターで、基本オブジェクトを作成します。
    064         *
    065         * @og.rev 3.1.1.1 (2003/04/03) 各オブジェクトから自分のインスタンスを返すファクトリメソッドを追加。
    066         * @og.rev 6.4.3.3 (2016/03/04) PMD refactoring. Each class should declare at least one constructor.
    067         *
    068         */
    069        public AbstractEditor() {
    070                super();
    071                name    = "null" ;
    072                size1   = "20"   ;
    073                size2   = "30"   ;
    074        }
    075
    076        /**
    077         * コンストラクター。
    078         *
    079         * @og.rev 3.1.1.1 (2003/04/03) 各オブジェクトから自分のインスタンスを返すファクトリメソッドを追加。
    080         * @og.rev 3.5.4.2 (2003/12/15) 漢字入力(IMEモード)をONにするのを、"K" のみとします。
    081         * @og.rev 3.5.4.2 (2003/12/15) size が 1 の場合、CSSファイルでサイズ指定を行うクラスを出力します。
    082         * @og.rev 3.5.4.6 (2004/01/30) 漢字入力(IMEモード)をONにするのを、"K" と、"KX" のみとします。
    083         * @og.rev 3.5.5.5 (2004/04/23) maxlength の導入
    084         * @og.rev 4.0.0.0 (2005/01/31) getFieldSize メソッドを XHTMLTag から DBColumn へ移動
    085         * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し
    086         * @og.rev 6.0.4.0 (2014/11/28) optionAttributes は、コンストラクタで設定します。
    087         * @og.rev 6.2.0.0 (2015/02/27) 小さなカラムのサイズ指定は、すでに廃止 ("S0" + 桁数(1～5))
    088         * @og.rev 6.2.0.0 (2015/02/27) フィールドサイズ 追加(VIEW_LENGTHと分離して、役割を明確にする)
    089         *
    090         * @param       clm     DBColumnオブジェクト
    091         */
    092        protected AbstractEditor( final DBColumn clm ) {
    093                name = clm.getName();
    094                final String disabled = clm.isWritable() ? null : "disabled" ;
    095
    096                final int maxlength = clm.getTotalSize();               // 4.0.0 (2005/01/31) メソッド名変更
    097
    098                // 6.1.1.0 (2015/01/17) Attributesの連結記述
    099                attributes = new Attributes()
    100                                                .set( "type"            , "text" )
    101                                                .set( "maxlength"       , String.valueOf( maxlength ) )
    102                                                .set( "disabled"        , disabled )
    103                                                .set( clm.getEditorAttributes() )                                       // #addAttributes( Attributes ) の代替え
    104                                                .add( "class"           , clm.getDbType() );                    // clazz 属性として使用
    105
    106                // 6.1.1.0 (2015/01/17) TagBufferの連結記述
    107                tagBuffer.add( attributes.get( "optionAttributes" ) );  // 6.0.4.0 (2014/11/28)
    108
    109                // 3.5.5.5 (2004/04/23) size の導入、初期値は、一覧表のサイズにします。
    110
    111                // 6.2.0.0 (2015/02/27) フィールドサイズ 追加(VIEW_LENGTHと分離して、役割を明確にする)
    112                size1 = String.valueOf( clm.getFieldSize( COLUMNS_MAXSIZE      ) );
    113                size2 = String.valueOf( clm.getFieldSize( VIEW_COLUMNS_MAXSIZE ) );
    114        }
    115
    116        /**
    117         * データの編集用文字列を返します。
    118         *
    119         * @og.rev 3.5.5.5 (2004/04/23) viewSize の導入
    120         * @og.rev 4.3.7.2 (2009/06/15) 属性でidが出力される場合は、idを出力しない
    121         * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し
    122         *
    123         * @param       value 値
    124         *
    125         * @return      データの編集用文字列
    126         * @og.rtnNotNull
    127         */
    128        @Override       // CellEditor
    129        public String getValue( final String value ) {
    130                // 6.1.1.0 (2015/01/17) TagBufferの連結記述
    131                return new TagBuffer( "input" )
    132                                        .add( "name"    , name )                                                                                // 4.3.6.0 (2009/04/01)
    133                                        .add( "id"              , name , isNull( attributes.get( "id" ) ) )             // 4.3.7.2 (2009/06/15)
    134                                        .add( "value"   , value )
    135                                        .add( "size"    , size1 )
    136                                        .add( tagBuffer.makeTag() )
    137                                        .makeTag();
    138        }
    139
    140        /**
    141         * name属性を変えた、データ表示/編集用のHTML文字列を作成します。
    142         * テーブル上の name に 行番号を付加して、名前_行番号 で登録するキーを作成し,
    143         * リクエスト情報を１つ毎のフィールドで処理できます。
    144         *
    145         * @og.rev 2.0.0.3 (2002/09/26) optionAttributes 属性に "$i" を使うとその行数に置き換る機能を追加。
    146         * @og.rev 3.1.0.0 (2003/03/20) 名前と行番号の区切り記号を "^" から "__" に変更。
    147         * @og.rev 3.5.4.2 (2003/12/15) getFieldSize を、XHTMLTag.getFieldSize に変更。
    148         * @og.rev 3.5.4.7 (2004/02/06) viewタグで表示する場合のカラムの大きさ VIEW_COLUMNS_MAXSIZE 追加
    149         * @og.rev 3.5.5.0 (2004/03/12) 名前と行番号の区切り記号("__")を、HybsSystem.JOINT_STRING  に変更。
    150         * @og.rev 3.5.5.5 (2004/04/23) viewSize の導入、初期値は、一覧表にあわせました。
    151         * @og.rev 3.5.5.5 (2004/04/23) 新規に Attributes オブジェクトを作成する方式を止めます。
    152         * @og.rev 4.3.7.2 (2009/06/15) 属性でidが出力される場合は、idを出力しない
    153         * @og.rev 5.1.7.0 (2010/06/01) 動的プルダウン実装見直し
    154         *
    155         * @param       row   行番号
    156         * @param       value 値
    157         *
    158         * @return      データ表示/編集用の文字列
    159         * @og.rtnNotNull
    160         */
    161        @Override       // CellEditor
    162        public String getValue( final int row,final String value ) {
    163                final String newName = name + HybsSystem.JOINT_STRING + row;
    164
    165                // 6.1.1.0 (2015/01/17) TagBufferの連結記述
    166                return new TagBuffer( "input" )
    167                                        .add( "name"    , newName )                                                                             // 4.3.6.0 (2009/04/01)
    168                                        .add( "id"              , newName , isNull( attributes.get( "id" ) ) )  // 4.3.7.2 (2009/06/15)
    169                                        .add( "value"   , value )
    170                                        .add( "size"    , size2 )
    171                                        .add( tagBuffer.makeTag() )
    172                                        .makeTag( row,value );
    173        }
    174}