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     */
016    package org.opengion.hayabusa.taglib;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    import org.opengion.hayabusa.common.HybsSystemException;
020    import org.opengion.fukurou.util.StringUtil;
021    import org.opengion.fukurou.util.TagBuffer;
022    
023    /**
024     * 配置図?�座席表を表す特殊系のビューですã?
025     *
026     * itd タグは、ガントã?ãƒ?ƒ€ー部の TDタグの繰返しに使用されますã?
027     * こã?繰返しは、ganttParam タグの minDuration でæŒ?®šされた間隔で行われますã?
028     * (例えばã€?.5 を指定すれã?、半日単位で処ç�?�•れますã?)
029     * itd タグの colspan 属æ?を指定したå?合ã?、itd 自身がã?td タグに colspan ã‚?
030     * 追åŠ?�™ると共に、繰返し自身をã?そã?æŒ?®š数ã�?�‘に抑制しますã?
031     * 具体的には、colspan="2" とするとã€?¼’回にä¸?›žしか、itd タグが呼び出されなã�?
032     * なりますã?
033     *
034     * @og.formSample
035     * ●形式ï¼?lt;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】スãƒ??タスの種類数??:会議ã€?:来客ã€?:出張ã€?:外å?ã€?:休暇ã€?:他ï¼?初期値: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     */
099    public 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】スãƒ??タスの種類数??:会議ã€?:来客ã€?:出張ã€?:外å?ã€?:休暇ã€?:他)をæŒ?®šしまã�?初期値:6)ã€?
234             *
235             * @og.tag
236             * スãƒ??タスの種類数??:会議ã€?:来客ã€?:出張ã€?:外å?ã€?:休暇ã€?:他)ã?、編é›??ãƒ??アãƒ??の作æ?に使ã�?�¾すã?
237             * 上記ã?場合ã??–種類になるためã?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    }