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 * <del>先に配?に?してからリクエスト変数の値を取得するよ?します? 196 * こうする事で、リクエストにカンマ区?の値を設定できるようになります?</del> 197 * ?方法???常のパラメータ取得後に、CSV?します? 198 * 199 * @og.rev 3.5.6.2 (2004/07/05) 先に配?に?してからリクエスト変数の値を取? 200 * @og.rev 3.8.8.5 (2007/03/09) 通常のパラメータ取得後に、CSV?に戻します? 201 * 202 * @param clms マ?ク処?行うカラ?(CSV形? 203 */ 204 public void setColumns( final String clms ) { 205 columns = StringUtil.csv2Array( getRequestParameter( clms ) ); 206 if( columns.length == 0 ) { columns = null; } 207 } 208 209 /** 210 * 【TAG】?ークを???true or 1)/処?な?false or 0)の設定を?しま?初期値:true)? 211 * 212 * @og.tag 213 * マ?クを??る?合??true"(また? "1") 214 * 処?な??合?, "true以?(また? "0")をセ?します? 215 * 初期値は?"true"(マ?クを???です? 216 * さらに、[カラ?] で、動?カラ??値で、?ークをする?しな? 217 * 選ぶ事が可能になります?値は?true"(また? "1") で、?ークします? 218 * 追?3.5.2.0 (2003/10/20)?markList属?に、??象??郡を指定できます? 219 * これにより、?ークを??るかど?の判断が?true,1 以外にも使用できるようになりました? 220 * 221 * @og.rev 3.5.0.0 (2003/09/17) onMark に、[カラ?] の値をセ?できるように修正? 222 * 223 * @param flag マ?クの処?[true,1:処??それ以?処?ない] 224 */ 225 public void setOnMark( final String flag ) { 226 onMark = nval( getRequestParameter( flag ),onMark ); 227 } 228 229 /** 230 * 【TAG】??る?ークを含????を?"|"区?の??で?しま?初期値:"true|TRUE|1")? 231 * 232 * @og.tag 233 * markListで与えられた文字?に、onMark??(大??小文字?区別あり)? 234 * 含まれて?ば、??ます? 235 * 例えば?A","B","C" と???が?onMark で?された 236 * 場合に処?るよ?した??合??A|B|C" をセ?します? 237 * markList には、[カラ?]?が可能です? 238 * 初期値は?"true|TRUE|1"です? 239 * 240 * @og.rev 3.5.2.0 (2003/10/20) 新規追? 241 * 242 * @param list 処?る?ーク(indexOf による含?含まな?? 243 */ 244 public void setMarkList( final String list ) { 245 markList = nval( getRequestParameter( list ),markList ); 246 } 247 248 /** 249 * 【TAG】スペ?スで区?れた?の値につ?、?ークします? 250 * 251 * @og.tag 252 * ?的に作?された表示結果に対して、引数の??を含??に? 253 * <span class="instr0">引数??</span> ??と置き換えます? 254 * 0 の部??、引数??の現れた?を指定します? 255 * これにより??索された?のみにマ?クすることが可能です? 256 * 部?字?は、スペ?スで区?、それぞれ独立した形でマ?ク 257 * されます?で、検索エンジン等で検索したキャ?ュ表示のような 258 * 効果を持たすことが可能になります? 259 * 260 * @param val スペ?スで区?れた?の値 261 * @see SqlAndTag#setInstrVals( String ) 262 */ 263 public void setInstrVals( final String val ) { 264 instrVals = nval( getRequestParameter( val ),instrVals ); 265 } 266 267 /** 268 * 【TAG】[$XXXX],[#XXXX]機?を有効にするかど??しま?初期値:"false")? 269 * 270 * @og.tag 271 * カラ??フォーマット??、[$XXXX],[#XXXX]などの就職記号を付けると? 272 * ??タでな??を?力できます? 273 * [$XXXX] は、レン?ー処?れた??を?[#XXXX]は、ラベルリソースを?力します? 274 * こ?、columnMarker の?ォルトでは、[$XXXX]は、URLエンコード??れた結果? 275 * 返されます?他?処?viewタグのボディ部?とは異なる??すが、互換性のため? 276 * [$XXXX]のレン?ー処??、行われません? 277 * こ?、属?で?true" を設定すれ?、他?フォーマット??同じ処?実行されます? 278 * 初期値は、互換性を?慮し?"false" になって?す? 279 * 280 * @og.rev 5.6.3.0 (2013/04/01) 新規追? 281 * 282 * @param val [$XXXX],[#XXXX]機?を有効にするかど?(true:有効/false:無効) 283 */ 284 public void setUseFormatDeco( final String val ) { 285 useFormatDeco = nval( getRequestParameter( val ),useFormatDeco ); 286 } 287 288 /** 289 * こ?オブジェクト???表現を返します? 290 * 基本???目?使用します? 291 * 292 * @return こ?クラスの??表現 293 */ 294 @Override 295 public String toString() { 296 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 297 .println( "VERSION" ,VERSION ) 298 .println( "column" ,column ) 299 .println( "columns" ,columns ) 300 .println( "onMark" ,onMark ) 301 .println( "markList" ,markList ) 302 .println( "Other..." ,getAttributes().getAttribute() ) 303 .fixForm().toString() ; 304 } 305 }