    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.taglib;
    017
    018/**
    019 * テーブルレイアウトで column タグ等の存在しない空欄箇所に挿入して、
    020 * テーブルの行列の個数を合わせるタグです。
    021 *
    022 * 通常の空欄は、ラベルと値という２つの項目を別々のカラムに登録するように
    023 * &lt;td&gt;&lt;/td&gt;タグが、２つ続いた形式をしていますが、一般に、
    024 * 個数は表示上の都合で任意の個数の&lt;td&gt;タグを使用したいケースが
    025 * あります。
    026 * その場合、このSpaceTag を使っておけば,大量の作成済み画面を修正しなくても
    027 * このクラスを修正するだけで,すべての空欄のデザインがキープできます。
    028 *
    029 * @og.formSample
    030 * ●形式：&lt;og:space /&gt;
    031 * ●body：なし
    032 *
    033 * ●Tag定義：
    034 *   &lt;og:space
    035 *       width              【TAG】全体の大きさ(width 属性)を指定します
    036 *       colspan            【TAG】全体の大きさ(width 属性)を指定します
    037 *       labelWidth         【TAG】ラベル部分(前半部分)の大きさ(width 属性)を指定します
    038 *       valueWidth         【TAG】値部分(後半部分)の大きさ(width 属性)を指定します
    039 *       debug              【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false)
    040 *   /&gt;
    041 *
    042 * ●使用例
    043 *      通常の、ラベル部、フィールド部が空の td タグを生成します。
    044 *      &lt;og:space /&gt;
    045 *
    046 *      td タグの大きさを指定することができます。
    047 *      &lt;og:space
    048 *         labelWidth = &quot;ラベル部分(前半部分)の大きさ(width 属性)を指定します。&quot;
    049 *         valueWidth = &quot;値部分(後半部分)の大きさ(width 属性)を指定します。&quot;
    050 *      /&gt;
    051 *
    052 * @og.group 画面部品
    053 *
    054 * @version  4.0
    055 * @author   Kazuhiko Hasegawa
    056 * @since    JDK5.0,
    057 */
    058public class SpaceTag extends CommonTagSupport {
    059        //* このプログラムのVERSION文字列を設定します。   {@value} */
    060        private static final String VERSION = "5.1.9.0 (2010/08/01)" ;
    061
    062        private static final long serialVersionUID = 519020100801L ;
    063
    064        private String labelWidth = null ;
    065        private String valueWidth = null ;
    066        private String width      = null ;              // 5.1.9.0 (2010/08/01) 追加
    067        private String colspan    = null ;              // 5.1.9.0 (2010/08/01) 追加
    068
    069        /**
    070         * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。
    071         *
    072         * @return      後続処理の指示( SKIP_BODY )
    073         */
    074        @Override
    075        public int doStartTag() {
    076                jspPrint( makeTag() );
    077                return SKIP_BODY ;
    078        }
    079
    080        /**
    081         * タグリブオブジェクトをリリースします。
    082         * キャッシュされて再利用されるので、フィールドの初期設定を行います。
    083         *
    084         * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。
    085         * @og.rev 5.1.9.0 (2010/08/01) width , colspan 属性追加
    086         */
    087        @Override
    088        protected void release2() {
    089                super.release2();
    090                labelWidth = null ;
    091                valueWidth = null ;
    092                width      = null ;             // 5.1.9.0 (2010/08/01) 追加
    093                colspan    = null ;             // 5.1.9.0 (2010/08/01) 追加
    094        }
    095
    096        /**
    097         * 検索条件の入力用のテキストフィールドを作成します。
    098         *
    099         * テーブルタグによりフィールドは分割されます。
    100         * 使用時は、テーブルタグを前後に使用して下さい。
    101         *
    102         * @og.rev 5.1.9.0 (2010/08/01) width , colspan 属性追加
    103         *
    104         * @return  入力用のテキストフィールドタグ
    105         */
    106        private String makeTag() {
    107                StringBuilder rtn = new StringBuilder();
    108
    109                // width 指定
    110                if( width != null && width.length() > 0  ) {
    111                        // width が指定されると、強制的に colspan を設定する。
    112                        if( colspan == null || colspan.length() == 0  ) {
    113                                colspan = "2";
    114                        }
    115                        rtn.append( "<td width=\"" );
    116                        rtn.append( width );
    117                        rtn.append( "\" colspan=\"" );
    118                        rtn.append( colspan );
    119                        rtn.append( "\"></td>" );
    120                }
    121                // すでに、width は未指定なので、colspan のみ出力
    122                else if( colspan != null && colspan.length() > 0  ) {
    123                        rtn.append( "<td colspan=\"" );
    124                        rtn.append( colspan );
    125                        rtn.append( "\"></td>" );
    126                }
    127                // width も colspan も未指定の場合のみ、labelWidth、valueWidth を出力
    128                else {
    129                        if( labelWidth == null || labelWidth.length() == 0  ) {
    130                                rtn.append( "<td></td>" );
    131                        }
    132                        else {
    133                                rtn.append( "<td width=\"" );
    134                                rtn.append( labelWidth );
    135                                rtn.append( "\"></td>" );
    136                        }
    137
    138                        if( valueWidth == null || valueWidth.length() == 0  ) {
    139                                rtn.append( "<td></td>" );
    140                        }
    141                        else {
    142                                rtn.append( "<td width=\"" );
    143                                rtn.append( valueWidth );
    144                                rtn.append( "\"></td>" );
    145                        }
    146                }
    147                return rtn.toString() ;
    148        }
    149
    150        /**
    151         * 【TAG】全体の大きさ(width 属性)を指定します。
    152         *
    153         * @og.tag
    154         * 通常の space タグは、td ２個分のタグを出力しますが、width 属性を
    155         * 指定した場合は、colspan="2" をセット下上で、width 属性に設定されます。
    156         *
    157         * @og.rev 5.1.9.0 (2010/08/01) 新規追加
    158         *
    159         * @param   width 属性
    160         */
    161        public void setWidth( final String width ) {
    162                this.width = getRequestParameter( width );
    163        }
    164
    165        /**
    166         * 【TAG】全体の大きさ(width 属性)を指定します。
    167         *
    168         * @og.tag
    169         * 属性は td タグの colspan 属性に設定されます。
    170         *
    171         * @og.rev 5.1.9.0 (2010/08/01) 新規追加
    172         *
    173         * @param   colspan 属性
    174         */
    175        public void setColspan( final String colspan ) {
    176                this.colspan = getRequestParameter( colspan );
    177        }
    178
    179        /**
    180         * 【TAG】ラベル部分(前半部分)の大きさ(width 属性)を指定します。
    181         *
    182         * @og.tag
    183         * 属性は td タグの width 属性に設定されます。
    184         *
    185         * @param   width 属性
    186         */
    187        public void setLabelWidth( final String width ) {
    188                labelWidth = getRequestParameter( width );
    189        }
    190
    191        /**
    192         * 【TAG】値部分(後半部分)の大きさ(width 属性)を指定します。
    193         *
    194         * @og.tag
    195         * 属性は td タグの width 属性に設定されます。
    196         *
    197         * @param   width 属性
    198         */
    199        public void setValueWidth( final String width ) {
    200                valueWidth = getRequestParameter( width );
    201        }
    202
    203        /**
    204         * このオブジェクトの文字列表現を返します。
    205         * 基本的にデバッグ目的に使用します。
    206         *
    207         * @return このクラスの文字列表現
    208         */
    209        @Override
    210        public String toString() {
    211                return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
    212                                .println( "VERSION"                     ,VERSION        )
    213                                .println( "width"                       ,width          )
    214                                .println( "colspan"                     ,colspan        )
    215                                .println( "labelWidth"          ,labelWidth     )
    216                                .println( "valueWidth"          ,valueWidth     )
    217                                .println( "Other..."    ,getAttributes().getAttribute() )
    218                                .fixForm().toString() ;
    219        }
    220}