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.common.HybsSystemException; 020import org.opengion.fukurou.util.StringUtil; 021import org.opengion.fukurou.util.TagBuffer; 022 023/** 024 * 配置図/座席表を表す特殊系のビューです。 025 * 026 * itd タグは、ガントヘッダー部の TDタグの繰返しに使用されます。 027 * この繰返しは、ganttParam タグの minDuration で指定された間隔で行われます。 028 * (例えば、0.5 を指定すれば、半日単位で処理されます。) 029 * itd タグの colspan 属性を指定した場合は、itd 自身が、td タグに colspan を 030 * 追加すると共に、繰返し自身を、その指定数だけに抑制します。 031 * 具体的には、colspan="2" とすると、2回に一回しか、itd タグが呼び出されなく 032 * なります。 033 * 034 * @og.formSample 035 * ●形式:<og:iMatrix ... /> 036 * ●body:なし 037 * ●前提:headタグで、adjustEvent="Matrix" を指定してください。 038 * 039 * ●Tag定義: 040 * <og:iMatrix 041 * mode 【TAG】[Layout:レイアウト編集/Value:設定値の編集](初期値:Layout) 042 * countPro 【TAG】データノードの属性数( 行, 列, 名称, 値, 色, 編集可否, ステータス )(初期値:7) 043 * (SQL文のカラム数(非表示項目を除く)) 044 * inputWidth 【TAG】編集時の入力欄幅(px)(初期値:50px) 045 * cellWidth 【TAG】セル幅(px) (初期値:75px) 046 * cellHeight 【TAG】セル高さ(px) (初期値:30px) 047 * showStatus 【TAG】ステータスの出力を行うかどうか[[true:表示する/false:表示しない]](初期値:false) 048 * countStatus 【TAG】ステータスの種類数(1:会議、2:来客、3:出張、4:外出、5:休暇、6:他)(初期値:6) 049 * writable 【TAG】画面編集フラグを[true:可/false:不可](初期値:false) 050 * editColor 【TAG】セル背景色の編集可否[true:編集可/false:編集不可](初期値:false) 051 * separator 【TAG】セル名称と設定値の間の区切り文字(初期値:":") 052 * paramVal 【TAG】セルの設定値はパラメータより渡す(初期値:"") 053 * paramColor 【TAG】セルの背景色はパラメータより渡す(初期値:"") 054 * notEditBgColor 【TAG】編集不可のセルの背景色(初期値:gray) 055 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 056 * /> 057 * 058 * ●使用例 059 * Select 文は、行, 列, 名称, 値, 色, 編集可否, ステータス の順で検索します。 060 * <og:query > 061 * select 行番号,列番号,セル名称,セル設定値,セル背景色,セルの編集可否,セルのステータス 062 * from レイアウトテーブル 063 * where ロケーションID = 'XXXX' 064 * order by 行番号,列番号 065 * </og:query> 066 * 067 * viewタグによるHTML出力 は、この通りにしてください。 068 * <og:view 069 * viewFormType = "HTMLDynamic" 070 * useScrollBar = "false" 071 * useHilightRow = "false" 072 * noMessage = "true" 073 * pageSize = "0" 074 * /> 075 * 076 * <og:iMatrix 077 * mode = "Layout/Value" 078 * countPro = "7" 079 * inputWidth = "80px" 080 * cellWidth = "100px" 081 * cellHeight = "30px" 082 * showStatus = "true/false" 083 * countStatus = "6" 084 * writable = "true/false" 085 * editColor = "true/false" 086 * separator = ":" 087 * paramVal = "{@XXX}" 088 * paramColor = "{@XXX}" 089 * notEditBgColor = "#XXXXXX" 090 * /> 091 * 092 * @og.rev 5.6.3.2 (2013/04/12) 新規作成 093 * @og.group 画面部品 094 * 095 * @version 5.0 096 * @author Kazuhiko Hasegawa 097 * @since JDK6.0, 098 */ 099public class ViewIMatrixTag extends CommonTagSupport { 100 //* このプログラムのVERSION文字列を設定します。 {@value} */ 101 private static final String VERSION = "5.6.3.2 (2013/04/12)" ; 102 103 private static final long serialVersionUID = 563220130412L ; 104 105 /** mode 引数に渡す事の出来る モードリスト */ 106 private static final String[] MODE_LIST = new String[] { "Layout" , "Value" }; 107 108 private TagBuffer tag = new TagBuffer( "iMatrix" ) ; 109 110 /** 111 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 112 * 113 * @og.rev 5.8.1.0 (2014/11/07) HTML5対応。javaScriptで、BODYがないと入れ子になってしまう。 114 * @return 後続処理の指示 115 */ 116 @Override 117 public int doEndTag() { 118 debugPrint(); // 4.0.0 (2005/02/28) 119 120 tag.setBody( "<!-- -->" ); // 5.8.1.0 (2014/11/07) HTML5対応。 121 jspPrint( tag.makeTag() ); 122 123 return(EVAL_PAGE); // ページの残りを評価する。 124 } 125 126 /** 127 * タグリブオブジェクトをリリースします。 128 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 129 * 130 */ 131 @Override 132 protected void release2() { 133 super.release2(); 134 tag = new TagBuffer( "iMatrix" ); 135 } 136 137 /** 138 * 【TAG】配置図/座席表の編集モード(Layout:レイアウト編集/Value:設定値の編集)を指定します(初期値:Layout)。 139 * 140 * @og.tag 141 * mode は、Layout:レイアウト編集を行うのか、Value:設定値の編集を行うかを指定します。 142 * Layout:レイアウト編集(CELLNAMEとFGCELLEDITの値を編集します。) 143 * Value :設定値の編集(VALUEとCOLORの値を編集します。) 144 * (adjustMatrix.jsの)初期値は、Layout:レイアウト編集 です。 145 * 146 * @param mode 編集モード(Layout:レイアウト編集/Value:設定値の編集) 147 */ 148 public void setMode( final String mode ) { 149 String tmpMode = StringUtil.nval( getRequestParameter( mode ),null ); 150 151 if( !check( tmpMode, MODE_LIST ) ) { 152 String errMsg = "指定のモード(mode)は指定できません。モード指定エラー" 153 + HybsSystem.CR 154 + "mode=[" + tmpMode + "] " 155 + HybsSystem.CR 156 + StringUtil.array2csv( MODE_LIST ) ; 157 throw new HybsSystemException( errMsg ); 158 } 159 160 tag.add( "mode",tmpMode ); 161 } 162 163 /** 164 * 【TAG】データノードの属性数( 行, 列, 名称, 値, 色, 編集可否, ステータス )を指定します(初期値:7)。 165 * 166 * @og.tag 167 * SQL文のカラム数(非表示項目を除く)を指定します。 168 * SQL文は、先頭から、「行, 列, 名称, 値, 色, 編集可否, ステータス」の順に検索する必要があります。 169 * これ以外に、表示項目になるカラムを指定する場合に、表示カラム数を設定します。 170 * 必要分だけ(行, 列, 名称, 値, 色, 編集可否, ステータス)の場合は、"7" を指定します。 171 * (adjustMatrix.jsの)初期値は、"7" です。 172 * 173 * @param countPro データノードの属性数 174 */ 175 public void setCountPro( final String countPro ) { 176 tag.add( "countPro",StringUtil.nval( getRequestParameter( countPro ),null ) ); 177 } 178 179 /** 180 * 【TAG】編集時の入力欄幅(px)を指定します(初期値:50px)。 181 * 182 * @og.tag 183 * 編集時の入力欄幅(px)を指定します。 184 * (adjustMatrix.jsの)初期値は、"50px" です。 185 * 186 * @param inputWidth 編集時の入力欄幅(px) 187 */ 188 public void setInputWidth( final String inputWidth ) { 189 tag.add( "inputWidth",StringUtil.nval( getRequestParameter( inputWidth ),null ) ); 190 } 191 192 /** 193 * 【TAG】セル幅(px)を指定します(初期値:75px)。 194 * 195 * @og.tag 196 * セル幅(px)を指定します。 197 * (adjustMatrix.jsの)初期値は、"75px" です。 198 * 199 * @param cellWidth セル幅(px) 200 */ 201 public void setCellWidth( final String cellWidth ) { 202 tag.add( "cellWidth",StringUtil.nval( getRequestParameter( cellWidth ),null ) ); 203 } 204 205 /** 206 * 【TAG】セル高さ(px)を指定します(初期値:30px)。 207 * 208 * @og.tag 209 * セル高さ(px)を指定します。 210 * (adjustMatrix.jsの)初期値は、"30px" です。 211 * 212 * @param cellHeight セル高さ(px) 213 */ 214 public void setCellHeight( final String cellHeight ) { 215 tag.add( "cellHeight",StringUtil.nval( getRequestParameter( cellHeight ),null ) ); 216 } 217 218 /** 219 * 【TAG】ステータスの出力を行うかどうか[true:表示する/false:表示しない]を指定します(初期値:false)。 220 * 221 * @og.tag 222 * ステータスの出力を行う場合は、../image/status_番号.png イメージを画面に表示します。 223 * 番号が、ステータス番号になります。 224 * (adjustMatrix.jsの)初期値は、false:表示しない です。 225 * 226 * @param showStatus ステータスの出力可否[true/false] 227 */ 228 public void setShowStatus( final String showStatus ) { 229 tag.add( "showStatus",StringUtil.nval( getRequestParameter( showStatus ),null ) ); 230 } 231 232 /** 233 * 【TAG】ステータスの種類数(1:会議、2:来客、3:出張、4:外出、5:休暇、6:他)を指定します(初期値:6)。 234 * 235 * @og.tag 236 * ステータスの種類数(1:会議、2:来客、3:出張、4:外出、5:休暇、6:他)は、編集ポップアップの作成に使います。 237 * 上記の場合、6種類になるため、countStatus="6" とします。 238 * 内部的には、status_0.png があります。 239 * (adjustMatrix.jsの)初期値は、"6" です。 240 * 241 * @param countStatus ステータスの種類数 242 */ 243 public void setCountStatus( final String countStatus ) { 244 tag.add( "countStatus",StringUtil.nval( getRequestParameter( countStatus ),null ) ); 245 } 246 247 /** 248 * 【TAG】画面編集を許可するかどうか[true:可/false:不可]を指定します(初期値:false)。 249 * 250 * @og.tag 251 * true:画面編集可/false:画面編集不可を指定します。 252 * ここでは、mode=[Layout/Value] に関係なく、false にすると編集不可になります。 253 * (adjustMatrix.jsの)初期値は、false:編集不可 です。 254 * 255 * @param writable 画面編集可否[true/false] 256 */ 257 public void setWritable( final String writable ) { 258 tag.add( "writable",StringUtil.nval( getRequestParameter( writable ),null ) ); 259 } 260 261 /** 262 * 【TAG】セル背景色の編集可否[true:編集可/false:編集不可]を指定します(初期値:false)。 263 * 264 * @og.tag 265 * セル背景色の編集可否[true:編集可/false:編集不可]を指定します。 266 * これは、mode="Value" で、writable="true" の場合のみ有効です。 267 * false にすると、COLOR属性の編集ができなくなります。 268 * (adjustMatrix.jsの)初期値は、false:編集不可 です。 269 * 270 * @param editColor セル背景色の編集可否[true/false] 271 */ 272 public void setEditColor( final String editColor ) { 273 tag.add( "editColor",StringUtil.nval( getRequestParameter( editColor ),null ) ); 274 } 275 276 /** 277 * 【TAG】セル名称と設定値の間の区切り文字を指定します(初期値:":")。 278 * 279 * @og.tag 280 * 画面上には、セル名称(CELLNAME)と設定値(VALUE)が表示されます。その時の、区切り文字を指定します。 281 * (adjustMatrix.jsの)初期値は、":" です。 282 * 283 * @param separator 区切り文字 284 */ 285 public void setSeparator( final String separator ) { 286 tag.add( "separator",StringUtil.nval( getRequestParameter( separator ),null ) ); 287 } 288 289 /** 290 * 【TAG】セルの設定値(VALUE)を指定します(初期値:"")。 291 * 292 * @og.tag 293 * セルの設定値(VALUE)を指定します。 294 * 295 * @param paramVal セルの設定値 296 */ 297 public void setParamVal( final String paramVal ) { 298 tag.add( "paramVal",StringUtil.nval( getRequestParameter( paramVal ),null ) ); 299 } 300 301 /** 302 * 【TAG】セルの背景色(COLOR)を指定します(初期値:"")。 303 * 304 * @og.tag 305 * セルの背景色を指定します。 306 * 307 * @param paramColor セルの背景色 308 */ 309 public void setParamColor( final String paramColor ) { 310 tag.add( "paramColor",StringUtil.nval( getRequestParameter( paramColor ),null ) ); 311 } 312 313 /** 314 * 【TAG】編集不可のセルの背景色を指定します(初期値:gray)。 315 * 316 * @og.tag 317 * 編集不可のセルの背景色を指定します。 318 * (adjustMatrix.jsの)初期値は、"gray" です。 319 * 320 * @param notEditBgColor 編集不可のセルの背景色 321 */ 322 public void setNotEditBgColor( final String notEditBgColor ) { 323 tag.add( "notEditBgColor",StringUtil.nval( getRequestParameter( notEditBgColor ),null ) ); 324 } 325 326 /** 327 * タグの名称を、返します。 328 * 自分自身のクラス名より、自動的に取り出せないため、このメソッドをオーバーライドします。 329 * 330 * @return タグの名称 331 */ 332 @Override 333 protected String getTagName() { 334 return "iMatrix" ; 335 } 336 337 /** 338 * このオブジェクトの文字列表現を返します。 339 * 基本的にデバッグ目的に使用します。 340 * 341 * @return このクラスの文字列表現 342 */ 343 @Override 344 public String toString() { 345 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 346 .println( "VERSION" ,VERSION ) 347 .println( "tag" ,tag.makeTag() ) 348 .println( "Other..." ,getAttributes().getAttribute() ) 349 .fixForm().toString() ; 350 } 351}