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 */ 016package org.opengion.hayabusa.taglib; 017 018import org.opengion.hayabusa.common.HybsSystem; 019import org.opengion.hayabusa.html.ViewMarker; 020import org.opengion.hayabusa.html.ViewMarker_MARKER; 021import org.opengion.fukurou.util.Attributes; 022import static org.opengion.fukurou.util.StringUtil.nval ; 023 024import java.util.Locale ; 025import java.io.ObjectOutputStream; 026import java.io.ObjectInputStream; 027import java.io.IOException; 028 029/** 030 * 複数のcolumnMarker を統合して、検索結果に対して様々な属性を付加するタグです。(参照:columnMarker) 031 * 032 * DBTableModelオブジェクトの表示にHTMLタグをマークします。 033 * 子タグとして、ColumnMarkerTag のBODY要素をパースして、タグを作成します。 034 * 035 * @og.formSample 036 * ●形式:<og:viewMarker > ・・・ </og:viewMarker > 037 * ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します) 038 * 039 * ●Tag定義: 040 * <og:viewMarker 041 * command ○【TAG】コマンド(NEW,RENEW,RESET,REVIEW)をセットします(必須)。 042 * viewMarkerId 【TAG】(通常使いません)requestから取得する ViewMarker に対応する Attributes オブジェクトの ID 043 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 044 * isRenderer 【TAG】マーカーのタイプが renderer かどうか[true/false]を指定します(初期値:true) 045 * > ... Body ... 046 * </og:viewMarker> 047 * 048 * ●使用例 049 * 商品CD2(CDSYHN02)は赤字で表示する。 050 * 商品CD3(CDSYHN03)は-----と表示する。 051 * <og:viewMarker command="{@command}"> 052 * <og:columnMarker column="CDSYHN02" onMark="true" > 053 * <font color='red'>[VCDSYHN02]</font> 054 * </og:columnMarker> 055 * <og:columnMarker column="CDSYHN03" onMark="true" > 056 * <CENTER>-----</CENTER> 057 * </og:columnMarker> 058 * </og:viewMarker> 059 * 060 * @og.group 画面表示 061 * 062 * @version 4.0 063 * @author Kazuhiko Hasegawa 064 * @since JDK5.0, 065 */ 066public class ViewMarkerTag extends CommonTagSupport { 067 //* このプログラムのVERSION文字列を設定します。 {@value} */ 068 private static final String VERSION = "5.1.9.0 (2010/08/01)" ; 069 070 private static final long serialVersionUID = 519020100801L ; 071 072 /** command 引数に渡す事の出来る コマンド 新規 {@value} */ 073 public static final String CMD_NEW = "NEW" ; 074 /** command 引数に渡す事の出来る コマンド 再検索 {@value} */ 075 public static final String CMD_RENEW = "RENEW" ; 076 /** command 引数に渡す事の出来る コマンド リセット {@value} */ 077 public static final String CMD_RESET = "RESET" ; // 3.5.4.0 (2003/11/25) 078 /** command 引数に渡す事の出来る コマンド 再表示 {@value} */ 079 public static final String CMD_REVIEW = "REVIEW" ; // 3.5.4.0 (2003/11/25) 080 081 /** command 引数に渡す事の出来る コマンド リスト */ 082 private static final String[] COMMAND_LIST = new String[] { 083 CMD_NEW , CMD_RENEW ,CMD_RESET , CMD_REVIEW }; // 3.5.4.0 (2003/11/25) 084 085 private transient ViewMarker viewMarker = new ViewMarker_MARKER(); 086 private String viewMarkerId = null; 087 private String command = null; 088 private boolean isRenderer = true; // 3.8.6.1 (2006/10/20) 089 090 /** 091 * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。 092 * 093 * @og.rev 5.1.9.0 (2010/08/01) 戻り値を、EVAL_BODY_INCLUDE → EVAL_BODY_BUFFERED に変更 094 * 095 * @return 後続処理の指示 096 */ 097 @Override 098 public int doStartTag() { 099 if( check( command, COMMAND_LIST ) ) { return EVAL_BODY_BUFFERED ; } // 5.1.9.0 (2010/08/01) 変更 100 else { return SKIP_BODY ; } 101 } 102 103 /** 104 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 105 * 106 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 107 * @og.rev 3.8.6.1 (2006/10/20) isRenderer 属性でマーカーの種類を指定 108 * 109 * @return 後続処理の指示 110 */ 111 @Override 112 public int doEndTag() { 113 debugPrint(); // 4.0.0 (2005/02/28) 114 if( check( command, COMMAND_LIST ) ) { 115 final String mid ; 116 if( isRenderer ) { 117 mid = nval( viewMarkerId,HybsSystem.VIEW_MARK_KEY ); 118 } 119 else { 120 mid = nval( viewMarkerId,HybsSystem.EDIT_MARK_KEY ); 121 } 122 setRequestAttribute( mid,viewMarker ); 123 } 124 125 return EVAL_PAGE ; 126 } 127 128 /** 129 * タグリブオブジェクトをリリースします。 130 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 131 * 132 * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加 133 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 134 * @og.rev 3.8.6.1 (2006/10/20) isRenderer属性追加、viewMarkerId属性初期値変更 135 * 136 */ 137 @Override 138 protected void release2() { 139 super.release2(); 140 viewMarker = new ViewMarker_MARKER(); 141 viewMarkerId = null; 142 command = null; 143 isRenderer = true; // 3.8.6.1 (2006/10/20) 144 } 145 146 /** 147 * 内部タグの ColumnMarkerTag より、個々のカラムの値を書き換える 為の 148 * マーカー文字列を受け取る。 149 * 150 * 複数の値を受け取って、後ほど、すべてのカラムに対して処理を行います。 151 * 152 * @og.rev 3.1.2.0 (2003/04/07) taglib パッケージ内部で使用している箇所を protected 化する。 153 * @og.rev 4.0.0.0 (2005/08/31) 同一カラムの複数登録を許可します。 154 * 155 * @param attri Attribute マーク処理属性 156 */ 157 protected void addAttribute( final Attributes attri ) { 158 viewMarker.addAttribute( attri ); 159 } 160 161 /** 162 * 【TAG】コマンド(NEW,RENEW,RESET,REVIEW)をセットします。 163 * 164 * @og.tag 165 * コマンドは,HTMLから(get/post)指定されますので,CMD_xxx で設定される 166 * フィールド定数値のいづれかを、指定できます。 167 * 168 * @param cmd コマンド(public static final 宣言されている文字列) 169 * @see <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.ViewMarkerTag.CMD_NEW">コマンド定数</a> 170 */ 171 public void setCommand( final String cmd ) { 172 String cmd2 = getRequestParameter( cmd ); 173 if( cmd2 != null && cmd2.length() > 0 ) { command = cmd2.toUpperCase(Locale.JAPAN); } 174 } 175 176 /** 177 * 【TAG】(通常使いません)requestから取得する ViewMarker に対応する Attributes オブジェクトの ID。 178 * 179 * @og.tag 180 * ViewForm オブジェクトに、ViewMarker オブジェクトをこのキーより取得することにより、 181 * カラムに対して、マーカー情報を付加して表示させる。 182 * 初期値は、HybsSystem.VIEW_MARK_KEY です。 183 * 184 * @og.rev 3.1.4.0 (2003/04/18) 新規追加 185 * @og.rev 3.5.6.3 (2004/07/12) {@XXXX} 変数を使用できるように変更。 186 * @og.rev 3.5.6.4 (2004/07/16) MARK_ID を付加して、他のid と混同しないようにします。 187 * @og.rev 3.8.6.1 (2006/10/20) 初期値:null (editMarker を考慮) 188 * 189 * @param id ViewMarker オブジェクトID 190 */ 191 public void setViewMarkerId( final String id ) { 192 viewMarkerId = nval( getRequestParameter( id ),null ) ; 193 } 194 195 /** 196 * 【TAG】マーカーのタイプが renderer かどうか[true/false]を指定します(初期値:true)。 197 * 198 * @og.tag 199 * このMarker オブジェクトが、ViewMarker か、EditMarker かを指定します。 200 * 内部的には、ViewMarker オブジェクトを構築しており、viewForm で、どちらにセット 201 * するかを決めているだけです。 202 * true にセットすると、従来からある、viewMarker(renderer) を指定します。 203 * false は、editMarker として作用し、オブジェクトが書き込み可能な場合に表示されます。 204 * 初期値は、true:renderer です。 205 * 206 * @og.rev 3.8.6.1 (2006/10/20) 新規追加 207 * 208 * @param flag マーカータイプ [true:renderer/false:editor] 209 */ 210 public void setIsRenderer( final String flag ) { 211 isRenderer = nval( getRequestParameter( flag ),isRenderer ) ; 212 } 213 214 /** 215 * シリアライズ用のカスタムシリアライズ書き込みメソッド 216 * 217 * @og.rev 4.0.0.0 (2006/09/31) 新規追加 218 * @serialData 一部のオブジェクトは、シリアライズされません。 219 * 220 * @param strm ObjectOutputStreamオブジェクト 221 * @throws IOException 入出力エラーが発生した場合 222 */ 223 private void writeObject( final ObjectOutputStream strm ) throws IOException { 224 strm.defaultWriteObject(); 225 } 226 227 /** 228 * シリアライズ用のカスタムシリアライズ読み込みメソッド 229 * 230 * ここでは、transient 宣言された内部変数の内、初期化が必要なフィールドのみ設定します。 231 * 232 * @og.rev 4.0.0.0 (2006/09/31) 新規追加 233 * @serialData 一部のオブジェクトは、シリアライズされません。 234 * 235 * @param strm ObjectInputStreamオブジェクト 236 * @see #release2() 237 * @throws IOException シリアライズに関する入出力エラーが発生した場合 238 * @throws ClassNotFoundException クラスを見つけることができなかった場合 239 */ 240 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException { 241 strm.defaultReadObject(); 242 viewMarker = new ViewMarker_MARKER(); 243 } 244 245 /** 246 * このオブジェクトの文字列表現を返します。 247 * 基本的にデバッグ目的に使用します。 248 * 249 * @return このクラスの文字列表現 250 */ 251 @Override 252 public String toString() { 253 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 254 .println( "VERSION" ,VERSION ) 255 .println( "viewMarkerId" ,viewMarkerId ) 256 .println( "command" ,command ) 257 .println( "Other..." ,getAttributes().getAttribute() ) 258 .fixForm().toString() ; 259 } 260}