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 *
030 * @og.formSample
031 * ●形式ï¼?タグとしては使われません)
032 * ●body?šあã‚?EVAL_BODY_BUFFERED:BODYを評価しã?{@XXXX} を解析しまã�?
033 *
034 * @og.rev 3.5.4.0 (2003/11/25) 新規追åŠ?
035 * @og.rev 3.5.4.2 (2003/12/15) カスタãƒ?‚¿グクラスから削除しますã?(abstractåŒ?
036 * @og.rev 4.0.0.0 (2006/01/31) カスタãƒ?‚¿グクラスに復活させますã?(publicåŒ?
037 * @og.group 画面部å“?
038 *
039 * @version 4.0
040 * @author Kazuhiko Hasegawa
041 * @since JDK5.0,
042 */
043 public class TFormatTag extends CommonTagSupport {
044 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
045 private static final String VERSION = "5.5.0.3 (2012/03/13)" ;
046
047 private static final long serialVersionUID = 550320120313L ;
048
049 private String rowspan = "2";
050 private String noClass = "false";
051 private String usableKey = null;
052 private String usableList = "1" ;
053 private String itdBody = ""; // 3.5.6.0 (2004/06/18)
054 private boolean useTrCut = true; // 5.5.0.3 (2012/03/13 )
055
056 /**
057 * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
058 *
059 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
060 *
061 * @return 後続å?ç�??æŒ?¤º( EVAL_BODY_BUFFERED )
062 */
063 @Override
064 public int doStartTag() {
065 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
066 if( useTag() ) {
067 return( EVAL_BODY_BUFFERED ); // Body を評価するã€? extends BodyTagSupport æ™?
068 }
069 return ( SKIP_BODY ); // Body を評価しなã�?
070 }
071
072 /**
073 * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
074 *
075 * @og.rev 3.5.6.0 (2004/06/18) setItdBody メソãƒ?ƒ‰による itdBody の登録処ç�?¿½åŠ?
076 * @og.rev 5.1.7.0 (2010/06/01) フォーマットã?{@XXXX}の値に[が含まれる場合ã?、サイニタイズ("\\]\\"に変換)するã€?
077 * @og.rev 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
078 *
079 * @return 後続å?ç�??æŒ?¤º(EVAL_PAGE)
080 */
081 @Override
082 public int doEndTag() {
083 debugPrint(); // 4.0.0 (2005/02/28)
084 // 5.2.2.0 (2010/11/01) caseKey 、caseVal 属æ?対å¿?
085 if( useTag() ) {
086 ViewFormTag viewform = (ViewFormTag)findAncestorWithClass( this,ViewFormTag.class );
087 if( viewform == null ) {
088 // String errMsg = "<b>こã?タグは、ViewFormTagのå†??(要ç´?に記述してくださいã€?/b>";
089 String errMsg = "<b>" + getTagName() + "タグは、ViewFormTagのå†??(要ç´?に記述してくださいã€?/b>";
090 throw new HybsSystemException( errMsg );
091 }
092 // 5.1.7.0 (2010/06/01) フォーマットã?{@XXXX}の値に[が含まれる場合ã?、サイニタイズ("\\]\\"に変換)するã€?
093 // String bodyFormat = getBodyString();
094 String bodyFormat = getSanitizedBodyString();
095
096 TableFormatter format = new TableFormatter();
097 format.setFormatType( getType() );
098 // format.setFormat( bodyFormat );
099 format.setFormat( bodyFormat, useTrCut ); // 5.5.0.3 (2012/03/13)
100 format.setRowspan( rowspan );
101 format.setNoClass( noClass );
102 format.setUsableKey( usableKey );
103 format.setUsableList( usableList );
104 format.setItdBody( itdBody ); // 3.5.6.0 (2004/06/18)
105 viewform.addFormatter( format );
106 }
107 return(EVAL_PAGE); // ペã?ジの残りを評価するã€?
108 }
109
110 /**
111 * タグリブオブジェクトをリリースしますã?
112 * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
113 *
114 * @og.rev 3.5.6.0 (2004/06/18) itdBody 属æ?の追åŠ?
115 *
116 */
117 @Override
118 protected void release2() {
119 super.release2();
120 rowspan = "2";
121 noClass = "false";
122 usableKey = null;
123 usableList = "1" ;
124 itdBody = ""; // 3.5.6.0 (2004/06/18)
125 }
126
127 /**
128 * 【TAG】表示ãƒ??タを作æ?する場合ã?フォーマットã?行数(rowspan)をセãƒ?ƒˆしまã�?初期値:2)ã€?
129 *
130 * @og.tag
131 * 表示ãƒ??タを作æ?する場合ã?フォーマットã?行数をセãƒ?ƒˆしますã?
132 * 上位ã? viewFormタグより、こちらが優先されますã?
133 *
134 * @param span フォーマットã?行数
135 */
136 public void setRowspan( final String span ) {
137 rowspan = span;
138 }
139
140 /**
141 * 【TAG】カラãƒ??クラスå�?VERCHAR2,NUMBER など)を使用するかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
142 *
143 * @og.tag
144 * "true" で、クラス属æ?を設定しません。これã?ã€?¼£?³?³ファイルに書かれてã�?‚‹属æ?ã‚?
145 * 使用しなã�?�“とを意味しますã?
146 * 初期値はã€?false" ですã?
147 *
148 * @param flag クラス名使用の有無(true:使用しなã�?false:使用するã€?
149 */
150 public void setNoClass( final String flag ) {
151 this.noClass = flag;
152 }
153
154 /**
155 * こã?フォーマットã?タイプを返しますã?
156 *
157 * タイプã?ã€?head/body/foot" の中から、指定しますã?
158 *
159 * @og.rev 3.5.5.8 (2004/05/20) abstract しますã?
160 *
161 * @return こã?フォーマットã?タイプを返しますã?
162 */
163 protected FormatterType getType() {
164 String errMsg = "こã?メソãƒ?ƒ‰は、THead/TBody/TFoot のå�?‚µブクラスで実è£?�—てくださいã€?;
165 throw new UnsupportedOperationException( errMsg );
166 }
167
168 // protected String getType() {
169 // String errMsg = "こã?メソãƒ?ƒ‰は、THead/TBody/TFoot のå�?‚µブクラスで実è£?�—てくださいã€?;
170 // throw new UnsupportedOperationException( errMsg );
171 // }
172
173 /**
174 * 【TAG】フォーマットã?使用可否を判断するキーとなるカラãƒ?��を指定しますã?
175 *
176 * @og.tag
177 * キーがã?usableList に含まれる場合ã?、このフォーãƒ?‚’使用できますã?
178 * キー(カラãƒ?��)が指定されなã�??合ã?、常に使用されますã?
179 * ※ 現時点では、BODYタイプã?み使用してã�?�¾すã?
180 *
181 * @param key フォーマットã?使用可否を判断するカラãƒ?��
182 */
183 public void setUsableKey( final String key ) {
184 usableKey = key;
185 }
186
187 /**
188 * 【TAG】フォーマットã?使用可否を判断するæ–?—å?リストをæŒ?®šしまã�?初期値:"1")ã€?
189 *
190 * @og.tag
191 * キーがã?こã?æ–?—å?リスト中に存在する場合ã?、このフォーãƒ?‚’使用できますã?
192 * こã?æ–?—å?リストã?、固定なæ–?—å?ですã?{@XXXX}は使用できますが、[XXXX]は
193 * 使用できませんã€?
194 * 初期値はã€?1" ですã?
195 * ※ 現時点では、BODYタイプã?み使用してã�?�¾すã?
196 *
197 * @param list フォーマットã?使用可否を判断するæ–?—å?リスãƒ?
198 */
199 public void setUsableList( final String list ) {
200 usableList = nval( getRequestParameter(list),usableList );
201 }
202
203 /**
204 * itdフォーマット文字å?を設定しますã?
205 *
206 * itd ボディ部のæ–?—å?を指定しますã?
207 * itd ボディは、繰り返し処ç�?‚’行いますã?これをã?上位ã?ボディæ–?—å?の中の
208 * HYBS_ITD_MARKER æ–?—å? と置き換えますã?
209 *
210 * @og.rev 3.5.6.0 (2004/06/18) itdフォーマット文字å?の取り込み
211 *
212 * @param itd itdフォーマットã?æ–?—å?
213 */
214 public void setItdBody( final String itd ) {
215 if( itd != null ) {
216 itdBody = itd;
217 }
218 }
219
220 /**
221 * 【TAGã€?先é?trタグを削除するかどã�?�‹[true/false]を指定しまã�?初期値:true)ã€?
222 *
223 * @og.tag
224 * フォーマットã?先é?がtrタグの場合ã?削除する処ç�?�Œありますがã€?
225 * CustomDataのような場合では削除したくありませんã€?
226 * falseを指定すると削除処ç�?‚’行わなã�?‚ˆã�?�«なりますã?
227 *
228 * @og.rev 5.5.0.3 (2012/03/13) 新規追åŠ?
229 *
230 * @param useFlg æƒ??出力をæŒ?®?[true:有効/false:無効]
231 */
232 public void setUseTrCut( final String useFlg ) {
233 useTrCut = nval( getRequestParameter( useFlg ),useTrCut );
234 }
235
236 /**
237 * こã?オブジェクトã?æ–?—å?表現を返しますã?
238 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
239 *
240 * @return こã?クラスのæ–?—å?表現
241 */
242 @Override
243 public String toString() {
244 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
245 // .println( "VERSION" ,VERSION )
246 .println( "rowspan" ,rowspan )
247 .println( "noClass" ,noClass )
248 .println( "usableKey" ,usableKey )
249 .println( "usableList" ,usableList )
250 .println( "itdBody" ,itdBody )
251 .println( "Other..." ,getAttributes().getAttribute() )
252 .fixForm().toString() ;
253 }
254 }