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