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     */
016    package org.opengion.hayabusa.taglib;
017    
018    import org.opengion.hayabusa.common.HybsSystemException;
019    import org.opengion.hayabusa.html.TableFormatter;
020    import org.opengion.hayabusa.html.FormatterType;
021    
022    import static org.opengion.fukurou.util.StringUtil.nval ;
023    
024    /**
025     * ヘッãƒ??フッターã€ã?ãƒ?‚£ãƒ¼éƒ¨ã®ãƒ•ォーマットを汎用çš?«å®šç¾©ã™ã‚‹ã‚¿ã‚°ã§ã™ã?
026     *
027     * thead,tfoot,tbody ã«ä»£ã‚る表示フォーマットをカスタマイズã™ã‚‹ã¨ãã«ä½¿ç”¨ã™ã‚‹è¦ªã‚¯ãƒ©ã‚¹ã§ã™ã?
028     *
029     * @og.rev 3.5.4.0 (2003/11/25) æ–°è¦è¿½åŠ?
030     * @og.rev 3.5.4.2 (2003/12/15) カスタãƒ?‚¿ã‚°ã‚¯ãƒ©ã‚¹ã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã?(abstractåŒ?
031     * @og.rev 4.0.0.0 (2006/01/31) カスタãƒ?‚¿ã‚°ã‚¯ãƒ©ã‚¹ã«å¾©æ´»ã•ã›ã¾ã™ã?(publicåŒ?
032     * @og.group ç”»é¢éƒ¨å“?
033     *
034     * @version  4.0
035     * @author       Kazuhiko Hasegawa
036     * @since    JDK5.0,
037     */
038    public class TFormatTag extends CommonTagSupport {
039            //* ã“ã?プログラãƒ??VERSIONæ–?­—å?を設定ã—ã¾ã™ã?       {@value} */
040            private static final String VERSION = "5.5.0.3 (2012/03/13)" ;
041    
042            private static final long serialVersionUID = 550320120313L ;
043    
044            private String rowspan          = "2";
045            private String noClass          = "false";
046            private String usableKey        = null;
047            private String usableList       = "1" ;
048            private String itdBody          = "";                   // 3.5.6.0 (2004/06/18)
049            private boolean useTrCut        = true;                 // 5.5.0.3 (2012/03/13 )
050    
051            /**
052             * Taglibã®é–‹å§‹ã‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doStartTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
053             *
054             * @og.rev 5.2.2.0 (2010/11/01) caseKey ã€caseVal 属æ?対å¿?
055             *
056             * @return      後続å?ç??æŒ?¤º( EVAL_BODY_BUFFERED )
057             */
058            @Override
059            public int doStartTag() {
060                    // 5.2.2.0 (2010/11/01) caseKey ã€caseVal 属æ?対å¿?
061                    if( useTag() ) {
062                            return( EVAL_BODY_BUFFERED );   // Body を評価ã™ã‚‹ã€? extends BodyTagSupport æ™?
063                    }
064                    return ( SKIP_BODY );                           // Body を評価ã—ãªã?
065            }
066    
067            /**
068             * Taglibã®çµ‚äº?‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doEndTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
069             *
070             * @og.rev 3.5.6.0 (2004/06/18) setItdBody メソãƒ?ƒ‰ã«ã‚ˆã‚‹ itdBody ã®ç™»éŒ²å‡¦ç?¿½åŠ?
071             * @og.rev 5.1.7.0 (2010/06/01) フォーマットã?{@XXXX}ã®å€¤ã«[ãŒå«ã¾ã‚Œã‚‹å ´åˆã?ã€ã‚µã‚¤ãƒ‹ã‚¿ã‚¤ã‚º("\\]\\"ã«å¤‰æ›)ã™ã‚‹ã€?
072             * @og.rev 5.2.2.0 (2010/11/01) caseKey ã€caseVal 属æ?対å¿?
073             *
074             * @return      後続å?ç??æŒ?¤º(EVAL_PAGE)
075             */
076            @Override
077            public int doEndTag() {
078                    debugPrint();           // 4.0.0 (2005/02/28)
079                    // 5.2.2.0 (2010/11/01) caseKey ã€caseVal 属æ?対å¿?
080                    if( useTag() ) {
081                            ViewFormTag viewform = (ViewFormTag)findAncestorWithClass( this,ViewFormTag.class );
082                            if( viewform == null ) {
083                                    String errMsg = "<b>ã“ã?ã‚¿ã‚°ã¯ã€ViewFormTagã®å†??(è¦ç´?ã«è¨˜è¿°ã—ã¦ãã ã•ã„ã€?/b>";
084                                    throw new HybsSystemException( errMsg );
085                            }
086                            // 5.1.7.0 (2010/06/01) フォーマットã?{@XXXX}ã®å€¤ã«[ãŒå«ã¾ã‚Œã‚‹å ´åˆã?ã€ã‚µã‚¤ãƒ‹ã‚¿ã‚¤ã‚º("\\]\\"ã«å¤‰æ›)ã™ã‚‹ã€?
087            //              String bodyFormat = getBodyString();
088                            String bodyFormat = getSanitizedBodyString();
089    
090                            TableFormatter format = new TableFormatter();
091                            format.setFormatType( getType() );
092    //                      format.setFormat( bodyFormat );
093                            format.setFormat( bodyFormat, useTrCut ); // 5.5.0.3 (2012/03/13)
094                            format.setRowspan( rowspan );
095                            format.setNoClass( noClass );
096                            format.setUsableKey( usableKey );
097                            format.setUsableList( usableList );
098                            format.setItdBody( itdBody );           // 3.5.6.0 (2004/06/18)
099                            viewform.addFormatter( format );
100                    }
101                    return(EVAL_PAGE);              // ペã?ã‚¸ã®æ®‹ã‚Šã‚’評価ã™ã‚‹ã€?
102            }
103    
104            /**
105             * タグリブオブジェクトをリリースã—ã¾ã™ã?
106             * キャãƒ?‚·ãƒ¥ã•れã¦å†åˆ©ç”¨ã•れるã?ã§ã€ãƒ•ィールドã?åˆæœŸè¨­å®šã‚’行ã„ã¾ã™ã?
107             *
108             * @og.rev 3.5.6.0 (2004/06/18) itdBody 属æ?ã®è¿½åŠ?
109             *
110             */
111            @Override
112            protected void release2() {
113                    super.release2();
114                    rowspan         = "2";
115                    noClass         = "false";
116                    usableKey       = null;
117                    usableList      = "1" ;
118                    itdBody         = "";                   // 3.5.6.0 (2004/06/18)
119            }
120    
121            /**
122             * ã€TAG】表示ãƒ??タを作æ?ã™ã‚‹å ´åˆã?フォーマットã?行数(rowspan)ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:2)ã€?
123             *
124             * @og.tag
125             * 表示ãƒ??タを作æ?ã™ã‚‹å ´åˆã?フォーマットã?行数をセãƒ?ƒˆã—ã¾ã™ã?
126             * 上ä½ã? viewFormタグよりã€ã“ã¡ã‚‰ãŒå„ªå…ˆã•れã¾ã™ã?
127             *
128             * @param       span フォーマットã?行数
129             */
130            public void setRowspan( final String span ) {
131                    rowspan = span;
132            }
133    
134            /**
135             * ã€TAG】カラãƒ??クラスå?VERCHAR2,NUMBER ãªã©)を使用ã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false)ã€?
136             *
137             * @og.tag
138             * "true" ã§ã€ã‚¯ãƒ©ã‚¹å±žæ?を設定ã—ã¾ã›ã‚“。ã“れã?ã€?¼£?³?³ãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ã‹ã‚Œã¦ã?‚‹å±žæ?ã‚?
139             * 使用ã—ãªã?“ã¨ã‚’æ„味ã—ã¾ã™ã?
140             * åˆæœŸå€¤ã¯ã€?false" ã§ã™ã?
141             *
142             * @param       flag クラスåä½¿ç”¨ã®æœ‰ç„¡(true:使用ã—ãªã?false:使用ã™ã‚‹ã€?
143             */
144            public void setNoClass( final String flag ) {
145                    this.noClass = flag;
146            }
147    
148            /**
149             * ã“ã?フォーマットã?タイプを返ã—ã¾ã™ã?
150             *
151             * タイプã?ã€?head/body/foot" ã®ä¸­ã‹ã‚‰ã€æŒ‡å®šã—ã¾ã™ã?
152             *
153             * @og.rev 3.5.5.8 (2004/05/20) abstract ã—ã¾ã™ã?
154             *
155             * @return      ã“ã?フォーマットã?タイプを返ã—ã¾ã™ã?
156             */
157            protected FormatterType getType() {
158                    String errMsg = "ã“ã?メソãƒ?ƒ‰ã¯ã€THead/TBody/TFoot ã®å?‚µãƒ–クラスã§å®Ÿè£?—ã¦ãã ã•ã„ã€?;
159                    throw new UnsupportedOperationException( errMsg );
160            }
161    
162    //      protected String getType() {
163    //              String errMsg = "ã“ã?メソãƒ?ƒ‰ã¯ã€THead/TBody/TFoot ã®å?‚µãƒ–クラスã§å®Ÿè£?—ã¦ãã ã•ã„ã€?;
164    //              throw new UnsupportedOperationException( errMsg );
165    //      }
166    
167            /**
168             * ã€TAG】フォーマットã?使用å¯å¦ã‚’判断ã™ã‚‹ã‚­ãƒ¼ã¨ãªã‚‹ã‚«ãƒ©ãƒ?を指定ã—ã¾ã™ã?
169             *
170             * @og.tag
171             * キーãŒã?usableList ã«å«ã¾ã‚Œã‚‹å ´åˆã?ã€ã“ã®ãƒ•ォーãƒ?‚’使用ã§ãã¾ã™ã?
172             * キー(カラãƒ?)ãŒæŒ‡å®šã•れãªã??åˆã?ã€å¸¸ã«ä½¿ç”¨ã•れã¾ã™ã?
173             * ※ ç¾æ™‚点ã§ã¯ã€BODYタイプã?ã¿ä½¿ç”¨ã—ã¦ã?¾ã™ã?
174             *
175             * @param  key フォーマットã?使用å¯å¦ã‚’判断ã™ã‚‹ã‚«ãƒ©ãƒ?
176             */
177            public void setUsableKey( final String key ) {
178                    usableKey = key;
179            }
180    
181            /**
182             * ã€TAG】フォーマットã?使用å¯å¦ã‚’判断ã™ã‚‹æ–?­—å?リストをæŒ?®šã—ã¾ã?åˆæœŸå€¤:"1")ã€?
183             *
184             * @og.tag
185             * キーãŒã?ã“ã?æ–?­—å?リスト中ã«å­˜åœ¨ã™ã‚‹å ´åˆã?ã€ã“ã®ãƒ•ォーãƒ?‚’使用ã§ãã¾ã™ã?
186             * ã“ã?æ–?­—å?リストã?ã€å›ºå®šãªæ–?­—å?ã§ã™ã?{&#064;XXXX}ã¯ä½¿ç”¨ã§ãã¾ã™ãŒã€[XXXX]ã¯
187             * 使用ã§ãã¾ã›ã‚“ã€?
188             * åˆæœŸå€¤ã¯ã€?1" ã§ã™ã?
189             * ※ ç¾æ™‚点ã§ã¯ã€BODYタイプã?ã¿ä½¿ç”¨ã—ã¦ã?¾ã™ã?
190             *
191             * @param  list フォーマットã?使用å¯å¦ã‚’判断ã™ã‚‹æ–?­—å?リスãƒ?
192             */
193            public void setUsableList( final String list ) {
194                    usableList = nval( getRequestParameter(list),usableList );
195            }
196    
197            /**
198             *  itdフォーマット文字å?を設定ã—ã¾ã™ã?
199             *
200             * itd ãƒœãƒ‡ã‚£éƒ¨ã®æ–?­—å?を指定ã—ã¾ã™ã?
201             * itd ボディã¯ã€ç¹°ã‚Šè¿”ã—処ç?‚’行ã„ã¾ã™ã?ã“れをã?上ä½ã?ボディæ–?­—å?ã®ä¸­ã®
202             * HYBS_ITD_MARKER æ–?­—å? ã¨ç½®ãæ›ãˆã¾ã™ã?
203             *
204             * @og.rev 3.5.6.0 (2004/06/18) itdフォーマット文字å?ã®å–り込ã¿
205             *
206             * @param  itd itdフォーマットã?æ–?­—å?
207             */
208            public void setItdBody( final String itd ) {
209                    if( itd != null ) {
210                            itdBody = itd;
211                    }
212            }
213    
214            /**
215             * ã€TAGã€?å…ˆé?trタグを削除ã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:true)ã€?
216             *
217             * @og.tag
218             * フォーマットã?å…ˆé?ãŒtrã‚¿ã‚°ã®å ´åˆã?削除ã™ã‚‹å‡¦ç?Œã‚りã¾ã™ãŒã€?
219             * CustomDataã®ã‚ˆã†ãªå ´åˆã§ã¯å‰Šé™¤ã—ãŸãã‚りã¾ã›ã‚“ã€?
220             * falseを指定ã™ã‚‹ã¨å‰Šé™¤å‡¦ç?‚’行ã‚ãªã?‚ˆã?«ãªã‚Šã¾ã™ã?
221             *
222             * @og.rev 5.5.0.3 (2012/03/13) æ–°è¦è¿½åŠ?
223             *
224             * @param  useFlg  æƒ??出力をæŒ?®?[true:有効/false:無効]
225             */
226            public void setUseTrCut( final String useFlg ) {
227                    useTrCut = nval( getRequestParameter( useFlg ),useTrCut );
228            }
229    
230            /**
231             * ã“ã?オブジェクトã?æ–?­—å?表ç¾ã‚’è¿”ã—ã¾ã™ã?
232             * 基本çš?«ãƒ?ƒãƒ?‚°ç›®çš?«ä½¿ç”¨ã—ã¾ã™ã?
233             *
234             * @return ã“ã?ã‚¯ãƒ©ã‚¹ã®æ–?­—å?表ç¾
235             */
236            @Override
237            public String toString() {
238                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
239            //                      .println( "VERSION"             ,VERSION        )
240                                    .println( "rowspan"             ,rowspan        )
241                                    .println( "noClass"             ,noClass        )
242                                    .println( "usableKey"   ,usableKey      )
243                                    .println( "usableList"  ,usableList     )
244                                    .println( "itdBody"             ,itdBody        )
245                                    .println( "Other..."    ,getAttributes().getAttribute() )
246                                    .fixForm().toString() ;
247            }
248    }