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