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.TabData;
020 import static org.opengion.fukurou.util.StringUtil.nval ;
021
022 /**
023 * 【å»?¢】タブã?インでã€??目をå?割して表示するタグのタブそのもã?を作æ?しますã?
024 *
025 * ※ こã?タグはå»?¢予定ですã?tabLink、tabList の使用をご検討くã�?�•ã�??
026 *
027 * ä¸?�¤の大きなHTMLをã?タブを使用することでè¤?•°の塊にåˆ?‰²表示できますã?
028 * åˆ?‰²された各タブã?、ä¸?�¤のHTMLのため、タブ間の移動によるæƒ??の消失はありませんã€?
029 * またã?ä¸?�¤のHTMLのため、タブにまたがって入力したå?は、すべて ä¸?‹¬送信することã‚?
030 * 可能ですã?(Formタグで、å?てのタブをまとめて記述してã�?‚Œば)
031 * 個ã?のタブã?æŒ?®šã?、この tab タグを使用しますã?
032 * それらを、タブテーブル の BODY 部に記述しますã?タブã?、記述されたé?番にã€?
033 * 設定されますã?
034 * タブテーブル の BODY 部に記述するタブã?、å¿?�šä¸?�¤以上å¿?¦�ですã?
035 *
036 * @og.formSample
037 * ●形式ï¼?lt;og:tabTable ... >
038 * <og:tab name="paGE1" lbl="page 1" >
039 * <jsp:directive.include file="paGE1.jsp" />
040 * </og:tab>
041 * <og:tab name="page2" lbl="page 2" >
042 * <jsp:directive.include file="page2.jsp" />
043 * </og:tab>
044 * </og:tabTable >
045 * ●body?šあã‚?EVAL_BODY_BUFFERED:BODYを評価しã?{@XXXX} を解析しまã�?
046 *
047 * ●Tag定義??
048 * <og:tab
049 * lbl 【TAG】ラベルリソースのラベルIDを指定しまã�?
050 * name 【å»?¢】要ç´?�«対して固有ã?名前(id)をつける場合に設定しまã�?
051 * term 【å»?¢】å?ç�?�™る条件を指定しまã�?初期値:null)
052 * termList 【å»?¢】å?ç�?�™る条件を含ã‚?‚ˆã�?�ªæ–?—å?を指定しまã�?
053 * delTerm 【å»?¢】å?ç�?�—なã�?‚¿ブを選択する条件を指定しまã�?初期値:null)
054 * delTermList 【å»?¢】å?ç�?�—なã�?�¡件を含ã‚?‚ˆã�?�ªæ–?—å?を指定しまã�?
055 * style 【TAG】タブに与えã‚?初期 style 属æ?を指定しまã�?
056 * keys 【å»?¢】タブが選択状æ…?OPEN選択タブ時)に使用するキーをCSV形式でè¤?•°æŒ?®šしまã�?
057 * vals 【å»?¢】タブが選択状æ…?OPEN選択タブ時)に使用する値をCSV形式でè¤?•°æŒ?®šしまã�?
058 * debug 【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
059 * > ... Body ...
060 * </og:tab>
061 *
062 * ●使用ä¾?
063 * <og:tabTable>
064 * <og:tab lbl="page 1">
065 * <table summary="layout" >
066 * <tr>
067 * <og:column name="SYSTEM_ID" must="true" />
068 * <og:column name="COLUMN_NAME" />
069 * <og:column name="RENDERER" />
070 * </tr>
071 * </table>
072 * </og:tab>
073 * <og:tab lbl="page 2">
074 * <table summary="layout" >
075 * <tr>
076 * <og:column name="DBTYPE" />
077 * <og:column name="NAME_JA" />
078 * <og:column name="EDITOR" />
079 * </tr>
080 * </table>
081 * </og:tab>
082 * </og:tabTable>
083 *
084 * @og.rev 3.5.6.5 (2004/08/09) 新規作æ?
085 * @og.group (å»?¢)画面部å“?
086 *
087 * @version 4.0
088 * @author Kazuhiko Hasegawa
089 * @since JDK5.0,
090 * @deprecated マイクロソフトのスクリプトに依存するためã?å»?¢しますã?tabLink、tabList の使用をご検討くã�?�•ã�??
091 */
092 @Deprecated public class TabTag extends CommonTagSupport {
093 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
094 private static final String VERSION = "4.0.0.0 (2005/08/31)" ;
095
096 private static final long serialVersionUID = 400020050831L ;
097
098 private String text = null;
099 private String name = null;
100 private String body = null;
101 private String style = null; // 3.8.6.1 (2006/10/24)
102
103 private String[] keys = null; // 3.8.6.2 (2006/11/01)
104 private String[] vals = null; // 3.8.6.2 (2006/11/01)
105 private Object[] backVals = null; // 3.8.6.2 (2006/11/01)
106
107 // 3.8.6.1 (2006/10/20)
108 private String term = null;
109 private String termList = null;
110 private String delTerm = null;
111 private String delTermList = null;
112 private boolean isOpen = false; // term ã�?termList に含まれてã�?‚‹場å�?true
113 private boolean isDelete = false; // delTerm ã�?delTermList に含まれてã�?‚‹場å�?true
114 private TabTableTag tabTable = null;
115
116 /**
117 * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
118 *
119 * @og.rev 3.8.6.2 (2006/11/01) keys,vals属æ?の処ç�?‚’追åŠ?
120 *
121 * @return 後続å?ç�??æŒ?¤º
122 */
123 @Override
124 public int doStartTag() {
125 tabTable = (TabTableTag)findAncestorWithClass( this,TabTableTag.class );
126 // isSelected の判断は、OPEN/DELETE 関係なくã?タブã?数ã�?�‘実行するå¿?¦�があるã€?
127 if( tabTable != null ) {
128 isOpen = tabTable.isSelected();
129 }
130 else {
131 String errMsg = "tabTable タグの BODY部で使用してくださいã€?;
132 throw new HybsSystemException( errMsg );
133 }
134
135 // del条件リストに存在する場合ã?、DELETE選択タブとして認識されるã€?
136 isDelete = ( delTermList != null && delTerm != null && delTermList.indexOf( delTerm ) >= 0 ) ;
137 if( isDelete ) { return(SKIP_BODY); } // Body を評価しなã�?
138
139 // isSelected の判断 が優先されるã€?
140 if( !isOpen ) {
141 // 条件リストに存在する場合ã?、OPEN選択タブとして認識されるã€?
142 isOpen = ( termList != null && term != null && termList.indexOf( term ) >= 0 ) ;
143 }
144
145 // keys変数のå…??値のé€?�¿とvals 値の設定ã?
146 if( isOpen && keys != null && keys.length > 0 ) {
147 int size = keys.length;
148 backVals = new Object[size];
149 for( int i=0; i<size; i++ ) {
150 String key = keys[i];
151 if( key != null && key.length() > 0 ) {
152 backVals[i] = getRequestAttribute( key );
153 setRequestAttribute( key,vals[i] );
154 }
155 }
156 }
157
158 return( EVAL_BODY_BUFFERED ); // Body を評価するã€? extends BodyTagSupport æ™?
159 }
160
161 /**
162 * Taglibのタグ本体を処ç�?�™ã‚?doAfterBody() ã‚?オーバã?ライドしますã?
163 *
164 * @return 後続å?ç�??æŒ?¤º(SKIP_BODY)
165 */
166 @Override
167 public int doAfterBody() {
168 body = getBodyString();
169 return(SKIP_BODY);
170 }
171
172 /**
173 * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
174 *
175 * @og.rev 3.8.6.1 (2006/10/20) term、termList、action属æ?を追åŠ?
176 * @og.rev 3.8.6.2 (2006/11/01) keys,vals属æ?の処ç�?‚’追åŠ?
177 *
178 * @return 後続å?ç�??æŒ?¤º
179 */
180 @Override
181 public int doEndTag() {
182 debugPrint(); // 4.0.0 (2005/02/28)
183 if( !isDelete ) {
184 // keys変数のå…??値の戻しã?
185 if( isOpen && keys != null && keys.length > 0 ) {
186 int size = keys.length;
187 for( int i=0; i<size; i++ ) {
188 String key = keys[i];
189 if( key != null && key.length() > 0 ) {
190 if( backVals[i] != null ) {
191 setRequestAttribute( key,backVals[i] );
192 }
193 else {
194 removeRequestAttribute( key );
195 }
196 }
197 }
198 }
199
200 text = getMsglbl();
201
202 TabData tab = new TabData( text,name,body,isOpen,style );
203 tabTable.addTabData( tab );
204 }
205 return(EVAL_PAGE);
206 }
207
208 /**
209 * タグリブオブジェクトをリリースしますã?
210 * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
211 *
212 * @og.rev 3.8.6.1 (2006/10/20) term、termList、action属æ?を追åŠ?
213 * @og.rev 3.8.6.2 (2006/11/01) keys, vals, isOpen, delTerm, delTermList 属æ?を追åŠ?
214 */
215 @Override
216 protected void release2() {
217 super.release2();
218 text = null;
219 name = null;
220 body = null;
221 term = null;
222 termList = null;
223 delTerm = null;
224 delTermList = null;
225 style = null;
226 keys = null; // 3.8.6.2 (2006/11/01)
227 vals = null; // 3.8.6.2 (2006/11/01)
228 isOpen = false; // 3.8.6.2 (2006/11/01)
229 isDelete = false; // 3.8.6.2 (2006/11/01)
230 tabTable = null;
231 }
232
233 /**
234 * 【å»?¢】要ç´?�«対して固有ã?名前(id)をつける場合に設定しますã?
235 *
236 * @og.tag 名前セãƒ?ƒˆ
237 *
238 * @param name 名前
239 * @deprecated クラスがå»?¢されましたã€?
240 */
241 @Deprecated public void setName( final String name ) {
242 this.name = getRequestParameter( name );
243 }
244
245 /**
246 * 【å»?¢】å?ç�?�™る条件を指定しまã�?初期値:null)ã€?
247 *
248 * @og.tag
249 * termListで与えられた文字å?に、termæ–?—å?(大æ–??小文字ã?区別あり)ã�?
250 * 含まれてã�?‚Œば、OPEN選択タブとして処ç�?�—ますã?
251 * OPEN選択タブでなã�?‚¿ブã?、å?期å?OPENにならなã�?� けで、タブそのもã?は表示されますã?
252 * OPEN選択とDELETE選択が競合したå?合ã?、DELETE選択が優先されますã?
253 * 初期値はã€?null ですã?
254 *
255 * @og.rev 3.8.6.1 (2006/10/20) 新規追åŠ?
256 *
257 * @param flag 処ç�?�™る条件
258 * @deprecated クラスがå»?¢されましたã€?
259 */
260 @Deprecated public void setTerm( final String flag ) {
261 term = nval( getRequestParameter( flag ),term );
262 }
263
264 /**
265 * 【å»?¢】å?ç�?�™る条件を含ã‚?‚ˆã�?�ªæ–?—å?を指定しますã?
266 *
267 * @og.tag
268 * termListで与えられた文字å?に、termæ–?—å?(大æ–??小文字ã?区別あり)ã�?
269 * 含まれてã�?‚Œば、OPEN選択タブとして処ç�?�—ますã?
270 * 例えばã€?A","B","C" とã�?�†æ–?—å?がã?term でæŒ?®šされた
271 * 場合に処ç�?�™るよã�?�«したã�??合ã?ã€?A|B|C" をセãƒ?ƒˆしますã?
272 * 初期値はã€?null ですã?
273 * 判定ã?、文字å?を含ã‚?�‹どã�?�‹なのでã€?¼‘文字ã?みの場合ã?ã€?|"区åˆ?‚Šにする
274 * å¿?¦�ã?ありませんã€?
275 * OPEN選択とDELETE選択が競合したå?合ã?、DELETE選択が優先されますã?
276 *
277 * @og.rev 3.8.6.1 (2006/10/20) 新規追åŠ?
278 *
279 * @param list 処ç�?�™る条件(indexOf による含ã‚?含まなã�?ˆ¤å®?
280 * @deprecated クラスがå»?¢されましたã€?
281 */
282 @Deprecated public void setTermList( final String list ) {
283 termList = nval( getRequestParameter( list ),termList );
284 }
285
286 /**
287 * 【å»?¢】å?ç�?�—なã�?‚¿ブを選択する条件を指定しまã�?初期値:null)ã€?
288 *
289 * @og.tag
290 * delTermListで与えられた文字å?に、delTermæ–?—å?(大æ–??小文字ã?区別あり)ã�?
291 * 含まれてã�?‚Œば、DELETE選択タブとして処ç�?�—ますã?
292 * DELETE選択タブã?、タブそのもã?が表示されませんã€?
293 * ただしã?タブã?selectIndex は、DELETEされたタブも含めて、カウントされますã?でã€?
294 * JSPでの設定時のé ?•ªがインãƒ?ƒƒクス番号になりますã?
295 * OPEN選択とDELETE選択が競合したå?合ã?、DELETE選択が優先されますã?
296 * 初期値はã€?null ですã?
297 *
298 * @og.rev 3.8.6.2 (2006/11/01) 新規追åŠ?
299 *
300 * @param flag DELETE選択タブ条件
301 * @deprecated クラスがå»?¢されましたã€?
302 */
303 @Deprecated public void setDelTerm( final String flag ) {
304 delTerm = nval( getRequestParameter( flag ),delTerm );
305 }
306
307 /**
308 * 【å»?¢】å?ç�?�—なã�?�¡件を含ã‚?‚ˆã�?�ªæ–?—å?を指定しますã?
309 *
310 * @og.tag
311 * delTermListで与えられた文字å?に、delTermæ–?—å?(大æ–??小文字ã?区別あり)ã�?
312 * 含まれてã�?‚Œば、DELETE選択タブとして処ç�?�—ますã?
313 * 例えばã€?A","B","C" とã�?�†æ–?—å?がã?delTerm でæŒ?®šされた
314 * 場合に処ç�?�—なã�?‚ˆã�?�«したã�??合ã?ã€?A|B|C" をセãƒ?ƒˆしますã?
315 * 初期値はã€?null ですã?
316 * 判定ã?、文字å?を含ã‚?�‹どã�?�‹なのでã€?¼‘文字ã?みの場合ã?ã€?|"区åˆ?‚Šにする
317 * å¿?¦�ã?ありませんã€?
318 * OPEN選択とDELETE選択が競合したå?合ã?、DELETE選択が優先されますã?
319 *
320 * @og.rev 3.8.6.2 (2006/11/01) 新規追åŠ?
321 *
322 * @param list DELETE選択タブ条件æ–?—å?(indexOf による含ã‚?含まなã�?ˆ¤å®?
323 */
324 @Deprecated public void setDelTermList( final String list ) {
325 delTermList = nval( getRequestParameter( list ),delTermList );
326 }
327
328 /**
329 * 【å»?¢】タブに与えã‚?初期 style 属æ?を指定しますã?
330 *
331 * @og.tag
332 * ts:tab 本体では、å?期選択時のスタイルシートを、defaultStyle と
333 * selectedStyle で与えるå¿?¦�がありますã?これは、id 属æ?を設定してã€?
334 * 外部でスタイルシートを定義する形式でæŒ?®šできませんã€?
335 * ここでæŒ?®šしã�?style 属æ? は、tabTableTag で与えã‚?style 属æ? より優先度は
336 * 高くなりますã?
337 * ここでの style は、タブã? OPEN選択には関係ありませんã€?
338 *
339 * @og.rev 3.8.6.1 (2006/10/24) 新規追åŠ?
340 *
341 * @param st タブに与えã‚?初期 style 属æ?
342 * @deprecated クラスがå»?¢されましたã€?
343 */
344 @Deprecated public void setStyle( final String st ) {
345 style = nval( getRequestParameter( st ),style );
346 }
347
348 /**
349 * 【å»?¢】タブが選択状æ…?OPEN選択タブ時)に使用するキーをCSV形式でè¤?•°æŒ?®šしますã?
350 *
351 * @og.tag
352 * タブã?BODYå†?ƒ¨でのみ有効なscope="request"変数を定義できますã?
353 * 条件は、term、termList によるOPEN選択タブ時にのみæŒ?®šã?タブã?
354 * BODY部å†??みに有効になりますã?
355 * タブã?前に設定されてã�?‚‹ scope="request"変数 はé€?�¿され、BODY部ã�?
356 * 終äº?�—た時点で、å?の変数に値が戻されますã?
357 * åˆ?§£方法ã?、CSV変数をå?にåˆ?§£してから、getRequestParameter で値を取得しますã?
358 * こうしなã�?�¨ãƒ??タ自身にカンマを持ってã�?‚‹場合にåˆ?§£をミスる為ですã?
359 *
360 * @og.rev 3.8.6.2 (2006/11/01) 新規追åŠ?
361 *
362 * @param key キー(CSV形å¼?
363 * @deprecated クラスがå»?¢されましたã€?
364 */
365 @Deprecated public void setKeys( final String key ) {
366 keys = getCSVParameter( key );
367 }
368
369 /**
370 * 【å»?¢】タブが選択状æ…?OPEN選択タブ時)に使用する値をCSV形式でè¤?•°æŒ?®šしますã?
371 *
372 * @og.tag
373 * タブã?BODYå†?ƒ¨でのみ有効なscope="request"変数を定義できますã?
374 * 条件は、term、termList によるOPEN選択タブ時にのみæŒ?®šã?タブã?
375 * BODY部å†??みに有効になりますã?
376 * タブã?前に設定されてã�?‚‹ scope="request"変数 はé€?�¿され、BODY部ã�?
377 * 終äº?�—た時点で、å?の変数に値が戻されますã?
378 * åˆ?§£方法ã?、CSV変数をå?にåˆ?§£してから、getRequestParameter で値を取得しますã?
379 * こうしなã�?�¨ãƒ??タ自身にカンマを持ってã�?‚‹場合にåˆ?§£をミスる為ですã?
380 *
381 * @param val 値(CSV形å¼?
382 * @deprecated クラスがå»?¢されましたã€?
383 */
384 @Deprecated public void setVals( final String val ) {
385 vals = getCSVParameter( val );
386 }
387
388 /**
389 * こã?オブジェクトã?æ–?—å?表現を返しますã?
390 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
391 *
392 * @return こã?クラスのæ–?—å?表現
393 */
394 @Override
395 public String toString() {
396 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
397 .println( "VERSION" ,VERSION )
398 .println( "text" ,text )
399 .println( "name" ,name )
400 .println( "body" ,body )
401 .println( "term" ,term )
402 .println( "termList" ,termList )
403 .println( "Other..." ,getAttributes().getAttribute() )
404 .fixForm().toString() ;
405 }
406 }