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 static org.opengion.fukurou.util.StringUtil.nval;
019 import org.opengion.hayabusa.common.HybsSystemException;
020
021 /**
022 * タブ形式ã?リンクを表示する場合に、タブそのもã?を表示するタグですã?
023 *
024 * tabLinkタグを親タグとしã?listType="TAG"を指定したå?合に、このタグを使用して
025 * タブを個別に定義しますã?
026 *
027 * タグの使用方法につã�?�¦は、tabLinkタグのドキュメントを参ç?して下さã�??
028 *
029 * å�?±žæ?は、{@XXXX} 変数が使用できますã?
030 * これは、ServletRequest から、XXXXをキーに値を取りå?ã�?こã?変数に割り当てますã?
031 * つまりã?こã?XXXXをキーにリクエストすれã?、この変数に値をセãƒ?ƒˆすることができますã?
032 *
033 * @og.formSample
034 * ●形式ï¼?lt;og:tabLink href="…" > <og:tabList name="TAB1" … /> … </og:tabLink >
035 * ●body?šなã�?
036 *
037 * ●Tag定義??
038 * <og:tabList
039 * name ○ã?TAG】要ç´?�«対して固有ã?名前をつけまã�?å¿??)ã€?
040 * lbl 【TAG】ラベルリソースのラベルIDを指定しまã�?
041 * href 【TAG】リンク先ã?JSPを指定しまã�?初期値:result.jsp)
042 * term 【TAG】å?ç�?�™る条件を指定しまã�?初期値:null)
043 * termList 【TAG】å?ç�?�™る条件を含ã‚?‚ˆã�?�ªæ–?—å?を指定しまã�?
044 * delTerm 【TAG】å?ç�?�—なã�?‚¿ブを選択する条件を指定しまã�?初期値:null)
045 * delTermList 【TAG】å?ç�?�—なã�?�¡件を含ã‚?‚ˆã�?�ªæ–?—å?を指定しまã�?
046 * unselClass 【TAG】非選択タブã?クラスを指定しまã�?初期値:unselTab)
047 * keys 【TAG】リンク先ã?JSPに引数として渡すキーをCSV形式でæŒ?®šしまã�?
048 * vals 【TAG】リンク先ã?JSPに引数として渡すå?をCSV形式でæŒ?®šしまã�?
049 * roles 【TAG】ロールをセãƒ?ƒˆしまã�?
050 * debug 【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
051 * />
052 *
053 * ●使用ä¾?
054 * tabListタグからタブリストを生æ?する場å�?
055 * <og:tabLink
056 * listType = "DB" タブã?ä¸?¦§をどこから取得するか
057 * href = "result.jsp" リンク先ã?JSP
058 * target = "RESULT" リンクターゲãƒ?ƒˆ
059 * openTab = "[true/false]" タブ表示後にタブを自動で開く
060 * openTabName = "{@PN} 自動で開くタブã?名前
061 * constKeys = "KEY1" 次画面に固定で渡すキーä¸?¦§
062 * constVals = "{@VAL1}" 次画面に固定で渡すå?ä¸?¦§
063 * listCount = "10" 1行辺りに表示するタブã?数
064 * selClass = "selTab" 選択タブã?クラス
065 * unselClass = "unselTab" 非選択タブã?クラス
066 * width = "100px" タブリンクのå¹?
067 * height = "50px" タブリンクの高さ
068 * >
069 * <og:tabList name="TAB1" href="result1.jsp" keys="PN,CDK" vals="ABC,V" />
070 * <og:tabList name="TAB2" href="result2.jsp" keys="PN,CDK" vals="BCD,W" />
071 * <og:tabList name="TAB3" href="result3.jsp" keys="PN,CDK" vals="CDE,X" />
072 * </og:tabLink>
073 *
074 * @og.group 画面表示
075 *
076 * @version 4.3.5.0 (2008/02/01)
077 * @author Nakamura
078 * @since JDK1.4,
079 */
080 public class TabListTag extends CommonTagSupport {
081 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
082 private static final String VERSION = "4.3.5.0 (2009/02/01)" ;
083
084 private static final long serialVersionUID = 435020090201L ;
085
086 private String name = null;
087 private String href = null;
088 private String unselClass = null;
089
090 private String[] keys = null;
091 private String[] vals = null;
092
093 private String term = null;
094 private String termList = null;
095 private String delTerm = null;
096 private String delTermList = null;
097 private boolean visible = false;
098 private TabLinkTag tabLink = null;
099
100 /**
101 * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
102 *
103 * @return 後続å?ç�??æŒ?¤º( SKIP_BODY )
104 */
105 @Override
106 public int doStartTag() {
107 tabLink = (TabLinkTag)findAncestorWithClass( this,TabLinkTag.class );
108 if( tabLink == null ) {
109 String errMsg = "tabLink タグの BODY部で使用してくださいã€?;
110 throw new HybsSystemException( errMsg );
111 }
112 return( SKIP_BODY ); // Body を評価するã€? extends BodyTagSupport æ™?
113 }
114
115 /**
116 * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
117 *
118 * @return 後続å?ç�??æŒ?¤º
119 */
120 @Override
121 public int doEndTag() {
122 debugPrint();
123
124 visible = getUser().isAccess( get( "roles" ) );
125
126 // delTermが優å…?
127 if( visible ) {
128 visible = ( delTermList == null || delTerm == null || delTermList.indexOf( delTerm ) < 0 );
129 }
130
131 // delTermで表示対象となったå?合に、termをå?ç�?
132 if( visible ) {
133 visible = ( termList == null || term == null || termList.indexOf( term ) >= 0 );
134 }
135
136 tabLink.addTag( href, name, getMsglbl(), unselClass, visible, keys, vals );
137
138 return( EVAL_PAGE );
139 }
140
141 /**
142 * タグリブオブジェクトをリリースしますã?
143 * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
144 */
145 @Override
146 protected void release2() {
147 super.release2();
148 name = null;
149 href = null;
150 term = null;
151 termList = null;
152 delTerm = null;
153 delTermList = null;
154 unselClass = null;
155 keys = null;
156 vals = null;
157 visible = false;
158 tabLink = null;
159 }
160
161 /**
162 * 【TAG】要ç´?�«対して固有ã?名前をつけますã?
163 *
164 * @og.tag
165 * 要ç´?�«対して固有ã?名前をつけますã?
166 * ここで設定された名称は、è?動でタブを表示するためのopenTabName属æ?判定にも使用されますã?
167 *
168 * @param nm タブ名
169 */
170 public void setName( final String nm ) {
171 name = nval( getRequestParameter( nm ), name );
172 }
173
174 /**
175 * 【TAG】リンク先ã?JSPを指定しまã�?初期値:result.jsp)ã€?
176 *
177 * @og.tag
178 * リンク先ã?JSPを指定しますã?
179 * ここでæŒ?®šしなã�??合ã?、tagLinkタグの値が適用されますã?
180 *
181 * @param hr リンク先ã?JSP
182 */
183 public void setHref( final String hr ) {
184 href = nval( getRequestParameter( hr ), href );
185 }
186
187 /**
188 * 【TAG】å?ç�?�™る条件を指定しまã�?初期値:null)ã€?
189 *
190 * @og.tag
191 * termListで与えられた文字å?に、termæ–?—å?(大æ–??小文字ã?区別あり)ã�?
192 * 含まれてã�?‚Œば、OPEN選択タブとして処ç�?�—ますã?
193 * OPEN選択タブでなã�?‚¿ブã?、å?期å?OPENにならなã�?� けで、タブそのもã?は表示されますã?
194 * OPEN選択とDELETE選択が競合したå?合ã?、DELETE選択が優先されますã?
195 * 初期値はã€?null ですã?
196 *
197 * @param flag 処ç�?�™る条件æ–?—å?
198 */
199 public void setTerm( final String flag ) {
200 term = nval( getRequestParameter( flag ),term );
201 }
202
203 /**
204 * 【TAG】å?ç�?�™る条件を含ã‚?‚ˆã�?�ªæ–?—å?を指定しますã?
205 *
206 * @og.tag
207 * termListで与えられた文字å?に、termæ–?—å?(大æ–??小文字ã?区別あり)ã�?
208 * 含まれてã�?‚Œば、OPEN選択タブとして処ç�?�—ますã?
209 * 例えばã€?A","B","C" とã�?�†æ–?—å?がã?term でæŒ?®šされた
210 * 場合に処ç�?�™るよã�?�«したã�??合ã?ã€?A|B|C" をセãƒ?ƒˆしますã?
211 * 初期値はã€?null ですã?
212 * 判定ã?、文字å?を含ã‚?�‹どã�?�‹なのでã€?¼‘文字ã?みの場合ã?ã€?|"区åˆ?‚Šにする
213 * å¿?¦�ã?ありませんã€?
214 * OPEN選択とDELETE選択が競合したå?合ã?、DELETE選択が優先されますã?
215 *
216 * @param list 処ç�?�™る条件(indexOf による含ã‚?含まなã�?ˆ¤å®?
217 */
218 public void setTermList( final String list ) {
219 termList = nval( getRequestParameter( list ),termList );
220 }
221
222 /**
223 * 【TAG】å?ç�?�—なã�?‚¿ブを選択する条件を指定しまã�?初期値:null)ã€?
224 *
225 * @og.tag
226 * delTermListで与えられた文字å?に、delTermæ–?—å?(大æ–??小文字ã?区別あり)ã�?
227 * 含まれてã�?‚Œば、DELETE選択タブとして処ç�?�—ますã?
228 * DELETE選択タブã?、タブそのもã?が表示されませんã€?
229 * ただしã?タブã?selectIndex は、DELETEされたタブも含めて、カウントされますã?でã€?
230 * JSPでの設定時のé ?•ªがインãƒ?ƒƒクス番号になりますã?
231 * OPEN選択とDELETE選択が競合したå?合ã?、DELETE選択が優先されますã?
232 * 初期値はã€?null ですã?
233 *
234 * @param flag DELETE選択タブ文字å?
235 */
236 public void setDelTerm( final String flag ) {
237 delTerm = nval( getRequestParameter( flag ),delTerm );
238 }
239
240 /**
241 * 【TAG】å?ç�?�—なã�?�¡件を含ã‚?‚ˆã�?�ªæ–?—å?を指定しますã?
242 *
243 * @og.tag
244 * delTermListで与えられた文字å?に、delTermæ–?—å?(大æ–??小文字ã?区別あり)ã�?
245 * 含まれてã�?‚Œば、DELETE選択タブとして処ç�?�—ますã?
246 * 例えばã€?A","B","C" とã�?�†æ–?—å?がã?delTerm でæŒ?®šされた
247 * 場合に処ç�?�—なã�?‚ˆã�?�«したã�??合ã?ã€?A|B|C" をセãƒ?ƒˆしますã?
248 * 初期値はã€?null ですã?
249 * 判定ã?、文字å?を含ã‚?�‹どã�?�‹なのでã€?¼‘文字ã?みの場合ã?ã€?|"区åˆ?‚Šにする
250 * å¿?¦�ã?ありませんã€?
251 * OPEN選択とDELETE選択が競合したå?合ã?、DELETE選択が優先されますã?
252 *
253 * @param list DELETE選択タブ条件æ–?—å?(indexOf による含ã‚?含まなã�?ˆ¤å®?
254 */
255 public void setDelTermList( final String list ) {
256 delTermList = nval( getRequestParameter( list ),delTermList );
257 }
258
259 /**
260 * 【TAG】非選択タブã?クラスを指定しまã�?初期値:unselTab)ã€?
261 *
262 * @og.tag
263 * タブが選択されてã�?�ªã�?ж態にある場合ã?、タブ部åˆ??クラス名をæŒ?®šしますã?
264 * こã?クラス名を変更する場合ã?、そのクラスをcustom/custom.css等で再定義して下さã�??
265 * tabListタグでæŒ?®šされた値は、tabLinkタグでæŒ?®šされたもã?より優先されますã?
266 * 初期値は、unselTabですã?
267 *
268 * @param cls 選択タブã?クラスå�?
269 */
270 public void setUnselClass( final String cls ) {
271 unselClass = nval( getRequestParameter( cls ), unselClass );
272 }
273
274 /**
275 * 【TAG】リンク先ã?JSPに引数として渡すキーをCSV形式でæŒ?®šしますã?
276 *
277 * @og.tag
278 * リンク先ã?JSPに引数として渡すキーをCSV形式でæŒ?®šしますã?
279 *
280 * @param key キー(CSV形å¼?
281 */
282 public void setKeys( final String key ) {
283 keys = getCSVParameter( key );
284 }
285
286 /**
287 * 【TAG】リンク先ã?JSPに引数として渡すå?をCSV形式でæŒ?®šしますã?
288 *
289 * @og.tag
290 * リンク先ã?JSPに引数として渡すå?をCSV形式でæŒ?®šしますã?
291 *
292 * @param val 値(CSV形å¼?
293 */
294 public void setVals( final String val ) {
295 vals = getCSVParameter( val );
296 }
297
298 /**
299 * 【TAG】ロールをセãƒ?ƒˆしますã?
300 *
301 * @og.tag
302 * ここでæŒ?®šしたカラãƒ?ƒールをå?に、ユーザー毎ã?アクセス許可がチェãƒ?‚¯されますã?
303 * アクセス許可されなã�?�¨、表示されませんã€?
304 * こã?ロールを指定しなã�??合ã?、カラãƒ?ƒªソースのロールが使用されますã?
305 *
306 * @param roles パラメータ
307 */
308 public void setRoles( final String roles ) {
309 set( "roles",getRequestParameter( roles ) );
310 }
311
312 /**
313 * こã?オブジェクトã?æ–?—å?表現を返しますã?
314 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
315 *
316 * @return こã?クラスのæ–?—å?表現
317 */
318 @Override
319 public String toString() {
320 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
321 .println( "VERSION" ,VERSION )
322 .println( "name" ,name )
323 .println( "href" ,href )
324 .println( "term" ,term )
325 .println( "termList" ,termList )
326 .println( "delTerm" ,delTerm )
327 .println( "delTermList" ,delTermList)
328 .println( "Other..." ,getAttributes().getAttribute() )
329 .fixForm().toString() ;
330 }
331 }