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_INCLUDE ); } 100 if( check( command, COMMAND_LIST ) ) { return( EVAL_BODY_BUFFERED ); } // 5.1.9.0 (2010/08/01) 変更 101 else { return( SKIP_BODY ); } 102 } 103 104 /** 105 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 106 * 107 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 108 * @og.rev 3.8.6.1 (2006/10/20) isRenderer 属性でマーカーの種類を指定 109 * 110 * @return 後続処理の指示 111 */ 112 @Override 113 public int doEndTag() { 114 debugPrint(); // 4.0.0 (2005/02/28) 115 if( check( command, COMMAND_LIST ) ) { 116 final String mid ; 117 if( isRenderer ) { 118 mid = nval( viewMarkerId,HybsSystem.VIEW_MARK_KEY ); 119 } 120 else { 121 mid = nval( viewMarkerId,HybsSystem.EDIT_MARK_KEY ); 122 } 123 setRequestAttribute( mid,viewMarker ); 124 } 125 126 return(EVAL_PAGE); 127 } 128 129 /** 130 * タグリブオブジェクトをリリースします。 131 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 132 * 133 * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加 134 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 135 * @og.rev 3.8.6.1 (2006/10/20) isRenderer属性追加、viewMarkerId属性初期値変更 136 * 137 */ 138 @Override 139 protected void release2() { 140 super.release2(); 141 viewMarker = new ViewMarker_MARKER(); 142 viewMarkerId = null; 143 command = null; 144 isRenderer = true; // 3.8.6.1 (2006/10/20) 145 } 146 147 /** 148 * 内部タグの ColumnMarkerTag より、個々のカラムの値を書き換える 為の 149 * マーカー文字列を受け取る。 150 * 151 * 複数の値を受け取って、後ほど、すべてのカラムに対して処理を行います。 152 * 153 * @og.rev 3.1.2.0 (2003/04/07) taglib パッケージ内部で使用している箇所を protected 化する。 154 * @og.rev 4.0.0.0 (2005/08/31) 同一カラムの複数登録を許可します。 155 * 156 * @param attri Attribute マーク処理属性 157 */ 158 protected void addAttribute( final Attributes attri ) { 159 viewMarker.addAttribute( attri ); 160 } 161 162 /** 163 * 【TAG】コマンド(NEW,RENEW,RESET,REVIEW)をセットします。 164 * 165 * @og.tag 166 * コマンドは,HTMLから(get/post)指定されますので,CMD_xxx で設定される 167 * フィールド定数値のいづれかを、指定できます。 168 * 169 * @param cmd コマンド(public static final 宣言されている文字列) 170 * @see <a href="../../../../constant-values.html#org.opengion.hayabusa.taglib.ViewMarkerTag.CMD_NEW">コマンド定数</a> 171 */ 172 public void setCommand( final String cmd ) { 173 String cmd2 = getRequestParameter( cmd ); 174 if( cmd2 != null && cmd2.length() > 0 ) { command = cmd2.toUpperCase(Locale.JAPAN); } 175 } 176 177 /** 178 * 【TAG】(通常使いません)requestから取得する ViewMarker に対応する Attributes オブジェクトの ID。 179 * 180 * @og.tag 181 * ViewForm オブジェクトに、ViewMarker オブジェクトをこのキーより取得することにより、 182 * カラムに対して、マーカー情報を付加して表示させる。 183 * 初期値は、HybsSystem.VIEW_MARK_KEY です。 184 * 185 * @og.rev 3.1.4.0 (2003/04/18) 新規追加 186 * @og.rev 3.5.6.3 (2004/07/12) {@XXXX} 変数を使用できるように変更。 187 * @og.rev 3.5.6.4 (2004/07/16) MARK_ID を付加して、他のid と混同しないようにします。 188 * @og.rev 3.8.6.1 (2006/10/20) 初期値:null (editMarker を考慮) 189 * 190 * @param id ViewMarker オブジェクトID 191 */ 192 public void setViewMarkerId( final String id ) { 193 viewMarkerId = nval( getRequestParameter( id ),null ) ; 194 } 195 196 /** 197 * 【TAG】マーカーのタイプが renderer かどうか[true/false]を指定します(初期値:true)。 198 * 199 * @og.tag 200 * このMarker オブジェクトが、ViewMarker か、EditMarker かを指定します。 201 * 内部的には、ViewMarker オブジェクトを構築しており、viewForm で、どちらにセット 202 * するかを決めているだけです。 203 * true にセットすると、従来からある、viewMarker(renderer) を指定します。 204 * false は、editMarker として作用し、オブジェクトが書き込み可能な場合に表示されます。 205 * 初期値は、true:renderer です。 206 * 207 * @og.rev 3.8.6.1 (2006/10/20) 新規追加 208 * 209 * @param flag マーカータイプ [true:renderer/false:editor] 210 */ 211 public void setIsRenderer( final String flag ) { 212 isRenderer = nval( getRequestParameter( flag ),isRenderer ) ; 213 } 214 215 /** 216 * シリアライズ用のカスタムシリアライズ書き込みメソッド 217 * 218 * @og.rev 4.0.0.0 (2006/09/31) 新規追加 219 * @serialData 一部のオブジェクトは、シリアライズされません。 220 * 221 * @param strm ObjectOutputStreamオブジェクト 222 * @throws IOException 入出力エラーが発生した場合 223 */ 224 private void writeObject( final ObjectOutputStream strm ) throws IOException { 225 strm.defaultWriteObject(); 226 } 227 228 /** 229 * シリアライズ用のカスタムシリアライズ読み込みメソッド 230 * 231 * ここでは、transient 宣言された内部変数の内、初期化が必要なフィールドのみ設定します。 232 * 233 * @og.rev 4.0.0.0 (2006/09/31) 新規追加 234 * @serialData 一部のオブジェクトは、シリアライズされません。 235 * 236 * @param strm ObjectInputStreamオブジェクト 237 * @see #release2() 238 * @throws IOException シリアライズに関する入出力エラーが発生した場合 239 * @throws ClassNotFoundException クラスを見つけることができなかった場合 240 */ 241 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException { 242 strm.defaultReadObject(); 243 viewMarker = new ViewMarker_MARKER(); 244 } 245 246 /** 247 * このオブジェクトの文字列表現を返します。 248 * 基本的にデバッグ目的に使用します。 249 * 250 * @return このクラスの文字列表現 251 */ 252 @Override 253 public String toString() { 254 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 255 .println( "VERSION" ,VERSION ) 256 .println( "viewMarkerId" ,viewMarkerId ) 257 .println( "command" ,command ) 258 .println( "Other..." ,getAttributes().getAttribute() ) 259 .fixForm().toString() ; 260 } 261}