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.fukurou.util.StringUtil; 019import org.opengion.fukurou.util.TagBuffer; 020 021/** 022 * 明細棒グラフで、バー部のヘッダーに、進捗率を示す線を表示します。 023 * 024 * iHead タグは、ガントの ヘッダー部に使用されます。 025 * 進捗率を示す線は、2本あり、デフォルトでは、中間点と最大値になります。 026 * グラフの右に、何かを表示する場合は、幅(width)を指定する必要があります。 027 * 028 * @og.formSample 029 * ●形式:<og:iHead ... /> 030 * ●body:なし 031 * ●前提:headタグで、adjustEvent="Bar" を指定してください。 032 * 033 * ●Tag定義: 034 * <og:iHead 035 * width 【TAG】グラフ部分の横幅を[px]で指定します。 036 * leftVal 【TAG】左線のヘッダ部分の文字を指定します(初期値:最大桁の半分) 037 * leftLoc 【TAG】左線のヘッダ部文字(及び線)の位置を左からの割合で指定します。 038 * leftBorderStyle 【TAG】左線のスタイルを指定します(初期値=dotted gray 1px)。 039 * adjustLeft 【TAG】左線のヘッダ部分の文字の上下位置をピクセル単位で指定します(負の数で下方向)。 040 * rightVal 【TAG】右線のヘッダ部分の文字を指定します(初期値:最大桁) 041 * rightLoc 【TAG】右線のヘッダ部文字(及び線)の位置を左からの割合で指定します。 042 * rightBorderStyle 【TAG】右線のスタイルを指定します(初期値=dotted gray 1px)。 043 * adjustRight 【TAG】右線のヘッダ部分の文字の上下位置をピクセル単位で指定します(負の数で下方向)。 044 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 045 * /> 046 * 047 * ●使用例 048 * <og:view 049 * viewFormType = "HTMLCustomTable" 050 * command = "{@command}" 051 * writable = "false" 052 * useScrollBar = "false" 053 * headerSkipCount="10" 054 * > 055 * <og:thead rowspan="2"> 056 * <tr> 057 * <td rowspan="2">[NOORDER]</td> 058 * <td rowspan="2"> 059 * <og:iHead width="150px" 060 * leftVal ="now" leftLoc ="0.8" leftBorderStyle ="solid red 1px" adjustLeft ="15px" 061 * rightVal="Target" rightLoc="1.0" rightBorderStyle="dashed red 2px" adjustRight="-15px" 062 * /> 063 * <td rowspan="2">[SINTYOKU]</td> 064 * </tr> 065 * </og:thead> 066 * <og:tbody rowspan="2"> 067 * <td rowspan="2">[NOORDER]</td> 068 * <td rowspan="2"> 069 * <iBar id="B0_[I]" type="0" value="[SINTYOKU]" baseVal="[KNORDER]" /> 070 * <iBar id="B1_[I]" type="1" value="[KNORDER_G]" color="[COLOR]" text="[KNORDER]" /> 071 * <br/> 072 * <iBar id="B2_[I]" type="1" value="[KNJISK_G],[KNMIKM_G]" color="black,green" /> 073 * <iBar id="B3_[I]" type="2" value="[KNJISK_G],[KNMIKM_G]" baseVal="[KNORDER_G]" color="green" /> 074 * <td rowspan="2">[SINTYOKU]</td> 075 * </og:tbody> 076 * </og:view> 077 * 078 * @og.rev 5.6.3.2 (2013/04/12) 新規作成 079 * @og.group 画面部品 080 * 081 * @version 5.0 082 * @author Kazuhiko Hasegawa 083 * @since JDK6.0, 084 */ 085public class ViewIHeadTag extends CommonTagSupport { 086 /** このプログラムのVERSION文字列を設定します。 {@value} */ 087 private static final String VERSION = "5.6.3.2 (2013/04/12)" ; 088 089 private static final long serialVersionUID = 563220130412L ; 090 091 private TagBuffer tag = new TagBuffer( "iHead" ) ; 092 093 /** 094 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 095 * 096 * @return 後続処理の指示 097 */ 098 @Override 099 public int doEndTag() { 100 debugPrint(); // 4.0.0 (2005/02/28) 101 102 jspPrint( tag.makeTag() ); 103 104 return EVAL_PAGE ; // ページの残りを評価する。 105 } 106 107 /** 108 * タグリブオブジェクトをリリースします。 109 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 110 * 111 */ 112 @Override 113 protected void release2() { 114 super.release2(); 115 tag = new TagBuffer( "iHead" ); 116 } 117 118 /** 119 * 【TAG】グラフ部分の横幅を[px]で指定します。 120 * 121 * @og.tag 122 * 指定しない場合は残りの横幅全てとなります。 123 * グラフの右側に何かを表示したい場合は指定する必要があります。 124 * 単位(px)は設定不要です。それ以外の単位は設定できません。 125 * 126 * @param width グラフ部分の横幅 127 */ 128 public void setWidth( final String width ) { 129 // JavaScript 側の都合で、px 単位は、削除します。 130 String tmpW = StringUtil.nval( getRequestParameter( width ),null ) ; 131 if( tmpW != null && tmpW.endsWith("px") ) { 132 tmpW = tmpW.substring( 0,tmpW.length()-2 ); 133 } 134 135 tag.add( "width",tmpW ); 136 } 137 138 /** 139 * 【TAG】左線のヘッダ部分の文字を指定します(初期値:最大桁の半分)。 140 * 141 * @og.tag 142 * 左線のヘッダ部分に表示する文字を指定します。 143 * 左線は、中間データ、または、途中経過を意味しますので、その様な単語にします。 144 * なにも指定しない場合は、右側が最大桁以下を切り捨てした値となり、左側はその半分の値です。 145 * leftValに関しては、0.4,0.4のように複数の値をカンマ区切りで書く事が可能です。 146 * 147 * @param leftVal 左線のヘッダ部分の文字 148 */ 149 public void setLeftVal( final String leftVal ) { 150 tag.add( "leftVal",StringUtil.nval( getRequestParameter( leftVal ),null ) ); 151 } 152 153 /** 154 * 【TAG】左線のヘッダ部文字(及び線)の位置を左からの割合(少数)で指定します。 155 * 156 * @og.tag 157 * グラフ幅全体を1として、左からの割合で指定します。(左が0.3で右が0.9など) 158 * leftLocに関しては、0.4,0.4のように複数の値をカンマ区切りで書く事が可能です。 159 * 160 * @param leftLoc 左線のヘッダ部文字(及び線)の位置の割合(少数) 161 */ 162 public void setLeftLoc( final String leftLoc ) { 163 tag.add( "leftLoc",StringUtil.nval( getRequestParameter( leftLoc ),null ) ); 164 } 165 166 /** 167 * 【TAG】左線のスタイルを指定します(初期値=dotted gray 1px)。 168 * 169 * @og.tag 170 * グラフに引かれる左線のスタイルを指定します。 171 * 初期値は、dotted gray 1px です。 172 * 173 * @param leftBorderStyle 左線のヘッダ部文字(及び線)の位置の割合(少数) 174 */ 175 public void setLeftBorderStyle( final String leftBorderStyle ) { 176 tag.add( "leftBorderStyle",StringUtil.nval( getRequestParameter( leftBorderStyle ),null ) ); 177 } 178 179 /** 180 * 【TAG】左線のヘッダ部分の文字の上下位置をピクセル単位で指定します(負の数で下方向)。 181 * 182 * @og.tag 183 * 左右の文字が重なる可能性がある場合に利用します。 184 * 10と指定すると、10マイナスされて文字が上方向にずれます。 185 * 負の数を指定すると、文字が下方向にずれます。 186 * 単位(px)は設定不要です。それ以外の単位は設定できません。 187 * 188 * @param adjustLeft 文字の上下位置指定 189 */ 190 public void setAdjustLeft( final String adjustLeft ) { 191 // JavaScript 側の都合で、px 単位は、削除します。 192 String tmpA = StringUtil.nval( getRequestParameter( adjustLeft ),null ) ; 193 if( tmpA != null && tmpA.endsWith("px") ) { 194 tmpA = tmpA.substring( 0,tmpA.length()-2 ); 195 } 196 197 tag.add( "adjustLeft",tmpA ); 198 } 199 200 /** 201 * 【TAG】右線のヘッダ部分の文字を指定します(初期値:最大桁)。 202 * 203 * @og.tag 204 * 右線のヘッダ部分に表示する文字を指定します。 205 * 右線は、最終データ、または、最大データを意味しますので、その様な単語にします。 206 * なにも指定しない場合は、右側が最大桁以下を切り捨てした値となり、左側はその半分の値です。 207 * 208 * @param rightVal 左線のヘッダ部分の文字 209 */ 210 public void setRightVal( final String rightVal ) { 211 tag.add( "rightVal",StringUtil.nval( getRequestParameter( rightVal ),null ) ); 212 } 213 214 /** 215 * 【TAG】右線のヘッダ部文字(及び線)の位置を左からの割合(少数)で指定します。 216 * 217 * @og.tag 218 * グラフ幅全体を1として、左からの割合で指定します。(左が0.3で右が0.9など) 219 * 220 * @param rightLoc 右線のヘッダ部文字(及び線)の位置の割合(少数) 221 */ 222 public void setRightLoc( final String rightLoc ) { 223 tag.add( "rightLoc",StringUtil.nval( getRequestParameter( rightLoc ),null ) ); 224 } 225 226 /** 227 * 【TAG】右線のスタイルを指定します(初期値=dotted gray 1px)。 228 * 229 * @og.tag 230 * グラフに引かれる右線のスタイルを指定します。 231 * 初期値は、dotted gray 1px です。 232 * 233 * @param rightBorderStyle 左線のヘッダ部文字(及び線)の位置の割合(少数) 234 */ 235 public void setRightBorderStyle( final String rightBorderStyle ) { 236 tag.add( "rightBorderStyle",StringUtil.nval( getRequestParameter( rightBorderStyle ),null ) ); 237 } 238 239 /** 240 * 【TAG】右線のヘッダ部分の文字の上下位置をピクセル単位で指定します(負の数で下方向)。 241 * 242 * @og.tag 243 * 左右の文字が重なる可能性がある場合に利用します。 244 * 10と指定すると、10マイナスされて文字が上方向にずれます。 245 * 負の数を指定すると、文字が下方向にずれます。 246 * 単位(px)は設定不要です。それ以外の単位は設定できません。 247 * 248 * @param adjustRight 文字の上下位置指定 249 */ 250 public void setAdjustRight( final String adjustRight ) { 251 // JavaScript 側の都合で、px 単位は、削除します。 252 String tmpA = StringUtil.nval( getRequestParameter( adjustRight ),null ) ; 253 if( tmpA != null && tmpA.endsWith("px") ) { 254 tmpA = tmpA.substring( 0,tmpA.length()-2 ); 255 } 256 257 tag.add( "adjustRight",tmpA ); 258 } 259 260 /** 261 * タグの名称を、返します。 262 * 自分自身のクラス名より、自動的に取り出せないため、このメソッドをオーバーライドします。 263 * 264 * @return タグの名称 265 */ 266 @Override 267 protected String getTagName() { 268 return "iHead" ; 269 } 270 271 /** 272 * このオブジェクトの文字列表現を返します。 273 * 基本的にデバッグ目的に使用します。 274 * 275 * @return このクラスの文字列表現 276 */ 277 @Override 278 public String toString() { 279 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 280 .println( "VERSION" ,VERSION ) 281 .println( "tag" ,tag.makeTag() ) 282 .println( "Other..." ,getAttributes().getAttribute() ) 283 .fixForm().toString() ; 284 } 285}