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.HybsSystem;
019
020 import static org.opengion.fukurou.util.StringUtil.nval;
021
022 import java.util.concurrent.atomic.AtomicInteger; // 5.5.2.6 (2012/05/25) findbugs対å¿?
023
024 /**
025 * 表示のON/OFF制御がå?来るフィールドセãƒ?ƒˆを作æ?するタグですã?
026 *
027 * フィールドセãƒ?ƒˆは関連するフォーãƒ??部品やラベルをグループ化する要ç´?�§ã€?
028 * 表示のON/OFF制御がå?来ますã?
029 * BODY 部åˆ?�«るフォーãƒ?ƒ¨品などのタグを記述すれば、そのままタイトル付きのグループ化
030 * された状態を作æ?できますã?
031 * useDisplayHide="false" で通常の fieldset と同じ機è?になりますã?通常、useDisplayHide="true"
032 * にすることで、タイトル部(ä¸?ˆ¬のlegendタグ)をクリãƒ?‚¯すると、表示がON/OFFしますã?
033 * useDisplayHide の初期値は、true(表示 ON/OFF機è?を使用する)ですã?
034 * 表示機è?が使用できる状æ…?useDisplayHide="true")では、さらに、å?期表示を行うかどã�?�‹ã‚?
035 * æŒ?®šできますã?これは、defaultNone="true" とすると初期表示は "style=display:none;" に
036 * 設定さã‚?つまりã?表示されなã�?жæ…?、defaultNone="false" とすると初期表示されますã?
037 * defaultNone の初期値は、true(表示されなã�?жæ…?ですã?
038 * こã?タグにはã€??常、第ä¸?¦�ç´?�¨してBODY部に記述する legendタグ は設定不要ですã?
039 * こã?タグの lbl 属æ?に、リソースæƒ??を記述することで、直接 legendタグ ã‚?
040 * 生æ?してã�?�¾すã?
041 *
042 * @og.formSample
043 * ●形式ï¼?lt;og:fieldset
044 * lbl="…" ラベルリソースのキー
045 * [ useDisplayHide="true" ] 表示 ON/OFF機è?を使用する(true)かどã�?�‹
046 * [ useDisplayHide="true" ] 初期値を表示ON(false)にするかOFF(true)にするã�?
047 * >
048 * <input …" />
049 * <input …" />
050 * </og:fieldset>
051 * ●body?šあã‚?EVAL_BODY_INCLUDE:BODYをインクルードし、{@XXXX} は解析しません)
052 *
053 * ●Tag定義??
054 * <og:fieldset
055 * lbl 【TAG】ラベルリソースのラベルIDを指定しまã�?
056 * useDisplayHide 【TAG】表示 ON/OFF機è?を使用するかどã�?�‹[true/false]を指定しまã�?初期値:true)
057 * defaultNone 【TAG】表示ON/OFF機è?を使用する場合ã?初期値をã?éš?�—(none)にするかどã�?�‹[true/false]を指定しまã�?初期値:true)
058 * debug 【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
059 * > ... Body ...
060 * </og:fieldset>
061 *
062 * ●使用ä¾?
063 * 例ï¼?通常の状態ã?表示ON/OFF機è?を使用しã?初期値は表示OFF 状æ…?
064 * <og:fieldset lbl="INSERT_GEA11" >
065 * <og:submit value="insertGEA11" lbl="COPY" command="COPY" />
066 * <og:column name="SYSTEM_ID" useRequestValue="false" must="true" td="no" />
067 * </og:fieldset>
068 *
069 * 例ï¼?通常の状態ã?表示ON/OFF機è?を使用しã?初期値は表示ON 状æ…?
070 * <og:fieldset lbl="GEM0001" defaultNone="false" >
071 * <og:column name="SYSTEM_ID" useRequestValue="false" must="true" td="no" />
072 * </og:fieldset>
073 *
074 * @og.rev 4.0.0.0 (2005/11/30) 新規作æ?
075 * @og.group 画面部å“?
076 *
077 * @version 4.0
078 * @author Kazuhiko Hasegawa
079 * @since JDK5.0,
080 */
081 public class FieldsetTag extends CommonTagSupport {
082 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
083 private static final String VERSION = "5.5.2.6 (2012/05/25)" ;
084
085 private static final long serialVersionUID = 552620120525L ;
086
087 // private static volatile int uniqID = 1 ; // ユニã?クID作æ?用
088 private static AtomicInteger uniqID = new AtomicInteger(1); // 5.5.2.6 (2012/05/25) findbugs対å¿?
089
090 private boolean useDisplayHide = true; // 表示 ON/OFF機è?を使用する(true)かどã�?�‹
091 private boolean defaultNone = true; // 初期値を表示ON(false)にするかOFF(true)にするã�?
092
093 /**
094 * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
095 *
096 * @og.rev 3.8.5.2 (2006/05/31) 初期値:defaultNone ã‚?hidden で出力しておくã€?
097 * @og.rev 5.5.2.6 (2012/05/25) findbugs対応ã?staticフィールドへの書き込みに、AtomicInteger を利用しますã?
098 *
099 * @return 後続å?ç�??æŒ?¤º( EVAL_BODY_INCLUDE )
100 */
101 @Override
102 public int doStartTag() {
103 // String id = String.valueOf( uniqID++ );
104 String id = String.valueOf( uniqID.getAndIncrement() ); // 5.5.2.6 (2012/05/25) findbugs対å¿?
105
106 String hideFunc = "";
107 String onoffMsg = "";
108 String divBody = "";
109 String hiddenVal = "";
110
111 if( useDisplayHide ) {
112 hideFunc = " onClick=\"hide( \'FS" + id + "\' );\"" ;
113 divBody = "<div id=\"FS" + id + "A\" style=\"display:" ;
114 hiddenVal = "<input type=\"hidden\" name=\"FS" + id + "C\" value=\"" + defaultNone + "\" />" ;
115 if( defaultNone ) {
116 onoffMsg = "<span id=\"FS" + id + "B\" >+ </span>";
117 divBody += "none;\" >" ;
118 }
119 else {
120 onoffMsg = "<span id=\"FS" + id + "B\" >- </span>";
121 divBody += "inline;\" >" ;
122 }
123 }
124
125 StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
126 buf.append( "<fieldset style=\"display:inline;\">" ).append( HybsSystem.CR );
127 buf.append( "<legend" ).append( hideFunc ).append( ">" );
128 buf.append( "<strong>" ).append( onoffMsg );
129 buf.append( getLongLabel() );
130 buf.append( "</strong></legend>" ).append( HybsSystem.CR );
131 buf.append( divBody );
132 buf.append( HybsSystem.CR );
133 buf.append( hiddenVal );
134 buf.append( HybsSystem.CR );
135
136 jspPrint( buf.toString() );
137 return( EVAL_BODY_INCLUDE ); // Body インクルーãƒ? extends TagSupport æ™?
138 }
139
140 /**
141 * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
142 *
143 * @return 後続å?ç�??æŒ?¤º
144 */
145 @Override
146 public int doEndTag() {
147 debugPrint(); // 4.0.0 (2005/02/28)
148
149 if( useDisplayHide ) {
150 jspPrint( "</div></fieldset>" + HybsSystem.CR );
151 }
152 else {
153 jspPrint( "</fieldset>" + HybsSystem.CR );
154 }
155
156 return(EVAL_PAGE); // ペã?ジの残りを評価するã€?
157 }
158
159 /**
160 * タグリブオブジェクトをリリースしますã?
161 * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
162 *
163 */
164 @Override
165 protected void release2() {
166 super.release2();
167 useDisplayHide = true;
168 defaultNone = true;
169 }
170
171 /**
172 * 【TAG】表示 ON/OFF機è?を使用するかどã�?�‹[true/false]を指定しまã�?初期値:true)ã€?
173 *
174 * @og.tag
175 * 表示 ON/OFF機è?を使用する場合ã?、true / 通常の fieldset を使用する場合ã?ã€?
176 * false を指定しますã?
177 * 初期値は、true(ON/OFF機è?を使用する)ですã?
178 *
179 * @param flag 表示 ON/OFF機è? [true:使用する/false:使用しない]
180 * @see #setDefaultNone( String )
181 */
182 public void setUseDisplayHide( final String flag ) {
183 useDisplayHide = nval( getRequestParameter( flag ),useDisplayHide ) ;
184 }
185
186 /**
187 * 【TAG】表示ON/OFF機è?を使用する場合ã?初期値をã?éš?�—(none)にするかどã�?�‹[true/false]を指定しまã�?初期値:true)ã€?
188 *
189 * @og.tag
190 * 表示 ON/OFF機è?を使用する場合にのみ設定å?は有効に機è?しますã?
191 * éš?�—(none)にする場合ã?、true をã?表示にする場合ã?、false をセãƒ?ƒˆしますã?
192 * 初期値は、true(éš?�—(none)にする)ですã?
193 *
194 * @param flag 表示ON/OFF機è?の初期値を隠しにするかどã�?�‹ [true:éš?�—(none)にする/false:表示にする]
195 * @see #setUseDisplayHide( String )
196 */
197 public void setDefaultNone( final String flag ) {
198 defaultNone = nval( getRequestParameter( flag ),defaultNone ) ;
199 }
200
201 /**
202 * こã?オブジェクトã?æ–?—å?表現を返しますã?
203 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
204 *
205 * @return こã?クラスのæ–?—å?表現
206 */
207 @Override
208 public String toString() {
209 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
210 .println( "VERSION" ,VERSION )
211 .println( "key" ,getLabelInterface().getKey() )
212 .println( "msglbl" ,getMsglbl() )
213 .println( "useDisplayHide" ,useDisplayHide )
214 .println( "defaultNone" ,defaultNone )
215 .println( "Other..." ,getAttributes().getAttribute() )
216 .fixForm().toString() ;
217 }
218 }