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 属?か?msg 属?に、リソース??を記述することで、直接 legendタグ ?
040 * 生?して?す?
041 *
042 * @og.formSample
043 * ●形式?lt;og:fieldset
044 * lbl="…" or msg="…" ラベルかメ?ージリソースのキー
045 * [ useDisplayHide="true" ] 表示 ON/OFF機?を使用する(true)かど?
046 * [ useDisplayHide="true" ] 初期値を表示ON(false)にするかOFF(true)にする?
047 * >
048 * <input …" />
049 * <input …" />
050 * </og:fieldset>
051 * ●body?あ?
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 msg="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 }