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.fukurou.util.StringUtil;
020 import org.opengion.fukurou.util.Attributes;
021
022 import static org.opengion.fukurou.util.StringUtil.nval ;
023
024 /**
025 * 検索結果のカラ?示に対して様?な属?を付加(マ?キング)するタグで?参?:viewMarker)?
026 *
027 * こ?タグは、カラ?にマ?キングするタグです?親タグとして、viewMarker ?
028 * 使用する?があります?
029 * こ?タグでは、BODY部に?した?を?レン?ーとして使用します?通常の???
030 * そ?ままで、{@XXXX}で?した変数は、リクエスト?を設定します?
031 * [XXXX]で?した?は、検索結果のDBTableModelの値を行毎に割り当てます?
032 * マ?カー??有無(マ?カーするかしな?)は、onMark属?と、markList属?で
033 * ?します?markList属?に??値に、onMark属?に設定した?が存在する場合?
034 * マ?カーされます? こ?markList属?には?1" と "true"が?期設?
035 * されて?ため、onMark属?に"1" また? "true"を指定すれ?、?行?ークされます?
036 * また?どちら?属?も?{@XXXX} ??[XXXX]変数が使用できます?[XXXX]変数では?
037 * 行毎に、onMark属???markList属?を設定できる為?通常はどちらか固?
038 * 行毎? マ?カー??有無を指定できます?
039 * [XXXX]変数でカラ?の先?に$を付加した場??[$XXXX])は、?の値がURLエンコー?
040 * されて返されます?
041 * ※ <b>現段階では、viewMarker がカラ?をキーにcolumnMarkerオブジェクトを
042 * 管?て?為、行毎にマ?クの有無は?できますが、?ークを?り替える
043 * 使?が?来ません?/b>
044 *
045 * @og.formSample
046 * ●形式?lt;og:columnMarker column="???" ??? > ??? </og:columnMarker >
047 * ●body?あ?EVAL_BODY_BUFFERED:BODYを評価し?{@XXXX} を解析しま?
048 *
049 * ●Tag定義??
050 * <og:columnMarker
051 * column 【TAG】?ーク処?行うカラ?を指定しま?
052 * columns 【TAG】?ーク処?行うカラ?をカンマ区?(CSV形?で??しま?
053 * onMark 【TAG】?ークを???true or 1)/処?な?false or 0)の設定を?しま?初期値:true)
054 * markList 【TAG】??る?ークを含????を?"|"区?の??で?しま?初期値:"true|TRUE|1")
055 * instrVals 【TAG】スペ?スで区?れた?の値につ?、?ークしま?
056 * useFormatDeco 【TAG】[$XXXX],[#XXXX]機?を有効にしま?初期値:false)
057 * debug 【TAG】デバッグ??を?力するかど?[true/false]を指定しま?初期値:false)
058 * > ... Body ...
059 * </og:columnMarker>
060 *
061 * ●使用?
062 * ?CD??CDSYHN02)は赤字で表示する?
063 * ?CD??CDSYHN03)は-----と表示する?
064 * <og:viewMarker command="{@command}">
065 * <og:columnMarker column="CDSYHN02" onMark="true" >
066 * <font color='red'>[VCDSYHN02]</font>
067 * </og:columnMarker>
068 * <og:columnMarker column="CDSYHN03" onMark="[XXXX]" markList="[YYYY]" >
069 * <CENTER><-----</CENTER>
070 * </og:columnMarker>
071 * </og:viewMarker>
072 *
073 * @og.group 画面表示
074 *
075 * @version 4.0
076 * @author Kazuhiko Hasegawa
077 * @since JDK5.0,
078 */
079 public class ColumnMarkerTag extends CommonTagSupport {
080 //* こ?プログラ??VERSION??を設定します? {@value} */
081 private static final String VERSION = "5.6.3.0 (2013/04/01)" ;
082
083 private static final long serialVersionUID = 563020130401L ;
084
085 private String column = null;
086 private String[] columns = null;
087 private String onMark = "true"; // true また? 1
088 // 3.5.2.0 (2003/10/20)
089 private String markList = "true|TRUE|1"; // true また? 1
090 private String instrVals = null; // 3.8.8.1 (2007/01/06)
091
092 private String useFormatDeco = "false"; // 5.6.3.0 (2013/04/01) [$XXXX],[#XXXX]機?を有効にするかど?
093
094 /**
095 * Taglibの開始タグが見つかったときに処??doStartTag() ?オーバ?ライドします?
096 *
097 * @return 後続????( EVAL_BODY_BUFFERED )
098 */
099 @Override
100 public int doStartTag() {
101 return( EVAL_BODY_BUFFERED ); // Body を評価する? extends BodyTagSupport ?
102 }
103
104 /**
105 * Taglibのタグ本体を処??doAfterBody() ?オーバ?ライドします?
106 *
107 * @og.rev 3.1.1.0 (2003/03/28) ボディの?を取得する??、CommonTagSupport で行う?
108 * @og.rev 3.5.2.0 (2003/10/20) markList属?を追?
109 * @og.rev 3.8.8.1 (2007/01/06) instrVals属?を追?
110 * @og.rev 4.0.0.0 (2005/08/31) 同?ラ???登録を許可します?
111 * @og.rev 5.6.3.0 (2013/04/01) useFormatDeco属?を追??$XXXX],[#XXXX]機?を有効にするかど???
112 *
113 * @return 後続????(SKIP_BODY)
114 */
115 @Override
116 public int doAfterBody() {
117 ViewMarkerTag viewMarker = (ViewMarkerTag)findAncestorWithClass( this,ViewMarkerTag.class );
118 if( viewMarker != null ) {
119 String marker = getBodyString();
120
121 set( "body" ,marker );
122 set( "onMark" ,onMark );
123 set( "markList" ,markList );
124 set( "instrVals",instrVals ); // 3.8.8.1 (2007/01/06)
125 set( "useFormatDeco",useFormatDeco ); // 5.6.3.0 (2013/04/01) [$XXXX],[#XXXX]機?を有効にするかど?
126 boolean flag = false;
127 if( column != null && column.length() > 0 ) {
128 // 4.0.0 (2005/08/31) 同?ラ???登録を許可します?
129 set( "column",column );
130 viewMarker.addAttribute( getAttributes() );
131 flag = true;
132 }
133
134 if( columns != null && columns.length > 0 ) {
135 flag = true;
136 for( int i=0; i<columns.length; i++ ) {
137 String newMarker = StringUtil.replace( marker,"[$1]","[" + columns[i] + "]" );
138 set( "body" ,newMarker );
139 // 4.0.0 (2005/08/31) 同?ラ???登録を許可します?
140 set( "column",columns[i] );
141 viewMarker.addAttribute( new Attributes( getAttributes() ) );
142 }
143 }
144
145 if( ! flag ) {
146 String errMsg = "colum か?columns は、どちらか??です?";
147 throw new HybsSystemException( errMsg );
148 }
149 }
150 return(SKIP_BODY);
151 }
152
153 /**
154 * タグリブオブジェクトをリリースします?
155 *
156 * キャ?ュされて再利用される?で、フィールド?初期設定を行います?
157 *
158 * @og.rev 2.0.0.4 (2002/09/27) カスタ?グの release() メソ?を?追?
159 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応?release2() ?doEndTag()で呼ぶ?
160 * @og.rev 3.5.2.0 (2003/10/20) markList属?を追?
161 * @og.rev 3.8.8.1 (2007/01/06) instrVals属?を追?
162 * @og.rev 5.6.3.0 (2013/04/01) useFormatDeco属?を追?
163 *
164 */
165 @Override
166 protected void release2() {
167 super.release2();
168 column = null;
169 columns = null;
170 onMark = "true"; // true また? 1
171 markList = "true|TRUE|1";
172 instrVals = null; // 3.8.8.1 (2007/01/06)
173 useFormatDeco = "false"; // 5.6.3.0 (2013/04/01) [$XXXX],[#XXXX]機?を有効にするかど?
174 }
175
176 /**
177 * 【TAG】?ーク処?行うカラ?を指定します?
178 *
179 * @og.tag
180 * こ?カラ?のTableModelに対して、?ークを??ます?
181 *
182 * @param clm カラ?
183 */
184 public void setColumn( final String clm ) {
185 column = getRequestParameter( clm );
186 }
187
188 /**
189 * 【TAG】?ーク処?行うカラ?をカンマ区?(CSV形?で??します?
190 *
191 * @og.tag
192 * こ??のカラ?のTableModelに対して?マ?クを??ます?
193 * カラ?は、カンマ区?で??することができます?そ?場合??
194 * ??カラ?対して、すべて同??処?行います?
195 * ?方法???常のパラメータ取得後に、CSV?します?
196 *
197 * @og.rev 3.5.6.2 (2004/07/05) 先に配?に?してからリクエスト変数の値を取?
198 * @og.rev 3.8.8.5 (2007/03/09) 通常のパラメータ取得後に、CSV?に戻します?
199 *
200 * @param clms マ?ク処?行うカラ?(CSV形?
201 */
202 public void setColumns( final String clms ) {
203 columns = StringUtil.csv2Array( getRequestParameter( clms ) );
204 if( columns.length == 0 ) { columns = null; }
205 }
206
207 /**
208 * 【TAG】?ークを???true or 1)/処?な?false or 0)の設定を?しま?初期値:true)?
209 *
210 * @og.tag
211 * マ?クを??る?合??true"(また? "1")
212 * 処?な??合?, "true以?(また? "0")をセ?します?
213 * 初期値は?"true"(マ?クを???です?
214 * さらに、[カラ?] で、動?カラ??値で、?ークをする?しな?
215 * 選ぶ事が可能になります?値は?true"(また? "1") で、?ークします?
216 * 追?3.5.2.0 (2003/10/20)?markList属?に、??象??郡を指定できます?
217 * これにより、?ークを??るかど?の判断が?true,1 以外にも使用できるようになりました?
218 *
219 * @og.rev 3.5.0.0 (2003/09/17) onMark に、[カラ?] の値をセ?できるように修正?
220 *
221 * @param flag マ?クの処?[true,1:処??それ以?処?ない]
222 */
223 public void setOnMark( final String flag ) {
224 onMark = nval( getRequestParameter( flag ),onMark );
225 }
226
227 /**
228 * 【TAG】??る?ークを含????を?"|"区?の??で?しま?初期値:"true|TRUE|1")?
229 *
230 * @og.tag
231 * markListで与えられた文字?に、onMark??(大??小文字?区別あり)?
232 * 含まれて?ば、??ます?
233 * 例えば?A","B","C" と???が?onMark で?された
234 * 場合に処?るよ?した??合??A|B|C" をセ?します?
235 * markList には、[カラ?]?が可能です?
236 * 初期値は?"true|TRUE|1"です?
237 *
238 * @og.rev 3.5.2.0 (2003/10/20) 新規追?
239 *
240 * @param list 処?る?ーク(indexOf による含?含まな??
241 */
242 public void setMarkList( final String list ) {
243 markList = nval( getRequestParameter( list ),markList );
244 }
245
246 /**
247 * 【TAG】スペ?スで区?れた?の値につ?、?ークします?
248 *
249 * @og.tag
250 * ?的に作?された表示結果に対して、引数の??を含??に?
251 * <span class="instr0">引数??</span> ??と置き換えます?
252 * 0 の部??、引数??の現れた?を指定します?
253 * これにより??索された?のみにマ?クすることが可能です?
254 * 部?字?は、スペ?スで区?、それぞれ独立した形でマ?ク
255 * されます?で、検索エンジン等で検索したキャ?ュ表示のような
256 * 効果を持たすことが可能になります?
257 *
258 * @param val スペ?スで区?れた?の値
259 * @see SqlAndTag#setInstrVals( String )
260 */
261 public void setInstrVals( final String val ) {
262 instrVals = nval( getRequestParameter( val ),instrVals );
263 }
264
265 /**
266 * 【TAG】[$XXXX],[#XXXX]機?を有効にするかど??しま?初期値:"false")?
267 *
268 * @og.tag
269 * カラ??フォーマット??、[$XXXX],[#XXXX]などの就職記号を付けると?
270 * ??タでな??を?力できます?
271 * [$XXXX] は、レン?ー処?れた??を?[#XXXX]は、ラベルリソースを?力します?
272 * こ?、columnMarker の?ォルトでは、[$XXXX]は、URLエンコード??れた結果?
273 * 返されます?他?処?viewタグのボディ部?とは異なる??すが、互換性のため?
274 * [$XXXX]のレン?ー処??、行われません?
275 * こ?、属?で?true" を設定すれ?、他?フォーマット??同じ処?実行されます?
276 * 初期値は、互換性を?慮し?"false" になって?す?
277 *
278 * @og.rev 5.6.3.0 (2013/04/01) 新規追?
279 *
280 * @param val [$XXXX],[#XXXX]機?を有効にするかど?(true:有効/false:無効)
281 */
282 public void setUseFormatDeco( final String val ) {
283 useFormatDeco = nval( getRequestParameter( val ),useFormatDeco );
284 }
285
286 /**
287 * こ?オブジェクト???表現を返します?
288 * 基本???目?使用します?
289 *
290 * @return こ?クラスの??表現
291 */
292 @Override
293 public String toString() {
294 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
295 .println( "VERSION" ,VERSION )
296 .println( "column" ,column )
297 .println( "columns" ,columns )
298 .println( "onMark" ,onMark )
299 .println( "markList" ,markList )
300 .println( "Other..." ,getAttributes().getAttribute() )
301 .fixForm().toString() ;
302 }
303 }