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 }