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             * @return      後続å?ç�??æŒ?¤º
114             */
115            @Override
116            public int doEndTag() {
117                    debugPrint();           // 4.0.0 (2005/02/28)
118    
119                    jspPrint( tag.makeTag() );
120    
121                    return(EVAL_PAGE);              // ペã?ジの残りを評価するã€?
122            }
123    
124            /**
125             * タグリブオブジェクトをリリースしますã?
126             * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
127             *
128             */
129            @Override
130            protected void release2() {
131                    super.release2();
132                    tag = new TagBuffer( "iMatrix" );
133            }
134    
135            /**
136             * 【TAG】é?置図?�座席表の編é›?ƒ¢ーãƒ?Layout:レイアウト編é›?Value:設定å?の編é›?を指定しまã�?初期値:Layout)ã€?
137             *
138             * @og.tag
139             * mode は、Layout:レイアウト編é›?‚’行うのかã?Value:設定å?の編é›?‚’行うかをæŒ?®šしますã?
140             * Layout:レイアウト編é›?CELLNAMEとFGCELLEDITの値を編é›?�—ますã?)
141             * Value :設定å?の編é›?VALUEとCOLORの値を編é›?�—ますã?)
142             * (adjustMatrix.jsの)初期値は、Layout:レイアウト編é›?ですã?
143             *
144             * @param   mode 編é›?ƒ¢ーãƒ?Layout:レイアウト編é›?Value:設定å?の編é›?
145             */
146            public void setMode( final String mode ) {
147                    String tmpMode = StringUtil.nval( getRequestParameter( mode ),null );
148    
149                    if( !check( tmpMode, MODE_LIST ) ) {
150                            String errMsg = "æŒ?®šã?モーãƒ?mode)はæŒ?®šできません。モード指定エラー"
151                                                            + HybsSystem.CR
152                                                            + "mode=[" + tmpMode + "] "
153                                                            + HybsSystem.CR
154                                                            + StringUtil.array2csv( MODE_LIST ) ;
155                            throw new HybsSystemException( errMsg );
156                    }
157    
158                    tag.add( "mode",tmpMode );
159            }
160    
161            /**
162             * 【TAG】データノã?ドã?属æ?数( è¡? åˆ? 名称, 値, 色, 編é›?�¯否, スãƒ??タス )を指定しまã�?初期値:7)ã€?
163             *
164             * @og.tag
165             * SQLæ–??カラãƒ?•°(非表示é ?›®を除ã�?を指定しますã?
166             * SQLæ–??、å?頭から、ã?è¡? åˆ? 名称, 値, 色, 編é›?�¯否, スãƒ??タス」ã?é ?�«検索するå¿?¦�がありますã?
167             * これ以外に、表示é ?›®になるカラãƒ?‚’æŒ?®šするå?合に、表示カラãƒ?•°を設定しますã?
168             * å¿?¦�å?ã�?�‘?ˆè¡? åˆ? 名称, 値, 色, 編é›?�¯否, スãƒ??タス?‰ã?場合ã?ã€?7" を指定しますã?
169             * (adjustMatrix.jsの)初期値はã€?7" ですã?
170             *
171             * @param   countPro ãƒ??タノã?ドã?属æ?数
172             */
173            public void setCountPro( final String countPro ) {
174                    tag.add( "countPro",StringUtil.nval( getRequestParameter( countPro ),null ) );
175            }
176    
177            /**
178             * 【TAG】編é›?™‚の入力æ¬?¹?px)を指定しまã�?初期値:50px)ã€?
179             *
180             * @og.tag
181             * 編é›?™‚の入力æ¬?¹?px)を指定しますã?
182             * (adjustMatrix.jsの)初期値はã€?50px" ですã?
183             *
184             * @param   inputWidth 編é›?™‚の入力æ¬?¹?px)
185             */
186            public void setInputWidth( final String inputWidth ) {
187                    tag.add( "inputWidth",StringUtil.nval( getRequestParameter( inputWidth ),null ) );
188            }
189    
190            /**
191             * 【TAG】セルå¹?px)を指定しまã�?初期値:75px)ã€?
192             *
193             * @og.tag
194             * セルå¹?px)を指定しますã?
195             * (adjustMatrix.jsの)初期値はã€?75px" ですã?
196             *
197             * @param   cellWidth セルå¹?px)
198             */
199            public void setCellWidth( final String cellWidth ) {
200                    tag.add( "cellWidth",StringUtil.nval( getRequestParameter( cellWidth ),null ) );
201            }
202    
203            /**
204             * 【TAG】セル高さ(px)を指定しまã�?初期値:30px)ã€?
205             *
206             * @og.tag
207             * セル高さ(px)を指定しますã?
208             * (adjustMatrix.jsの)初期値はã€?30px" ですã?
209             *
210             * @param   cellHeight セル高さ(px)
211             */
212            public void setCellHeight( final String cellHeight ) {
213                    tag.add( "cellHeight",StringUtil.nval( getRequestParameter( cellHeight ),null ) );
214            }
215    
216            /**
217             * 【TAG】スãƒ??タスの出力を行うかどã�?�‹[true:表示する/false:表示しない]を指定しまã�?初期値:false)ã€?
218             *
219             * @og.tag
220             * スãƒ??タスの出力を行う場合ã?ã€?./image/status_番号.png イメージを画面に表示しますã?
221             * 番号がã?スãƒ??タス番号になりますã?
222             * (adjustMatrix.jsの)初期値は、false:表示しなã�?ですã?
223             *
224             * @param   showStatus スãƒ??タスの出力可否[true/false]
225             */
226            public void setShowStatus( final String showStatus ) {
227                    tag.add( "showStatus",StringUtil.nval( getRequestParameter( showStatus ),null ) );
228            }
229    
230            /**
231             * 【TAG】スãƒ??タスの種類数??:会議ã€?:来客ã€?:出張ã€?:外å?ã€?:休暇ã€?:他)をæŒ?®šしまã�?初期値:6)ã€?
232             *
233             * @og.tag
234             * スãƒ??タスの種類数??:会議ã€?:来客ã€?:出張ã€?:外å?ã€?:休暇ã€?:他)ã?、編é›??ãƒ??アãƒ??の作æ?に使ã�?�¾すã?
235             * 上記ã?場合ã??–種類になるためã?countStatus="6" としますã?
236             * å†?ƒ¨çš?�«は、status_0.png がありますã?
237             * (adjustMatrix.jsの)初期値はã€?6" ですã?
238             *
239             * @param   countStatus スãƒ??タスの種類数
240             */
241            public void setCountStatus( final String countStatus ) {
242                    tag.add( "countStatus",StringUtil.nval( getRequestParameter( countStatus ),null ) );
243            }
244    
245            /**
246             * 【TAG】画面編é›?‚’許可するかどã�?�‹[true:可/false:不可]を指定しまã�?初期値:false)ã€?
247             *
248             * @og.tag
249             * true:画面編é›?�¯/false:画面編é›?¸�可を指定しますã?
250             * ここでは、mode=[Layout/Value] に関係なくã?false にすると編é›?¸�可になりますã?
251             * (adjustMatrix.jsの)初期値は、false:編é›?¸�可 ですã?
252             *
253             * @param   writable 画面編é›?�¯否[true/false]
254             */
255            public void setWritable( final String writable ) {
256                    tag.add( "writable",StringUtil.nval( getRequestParameter( writable ),null ) );
257            }
258    
259            /**
260             * 【TAG】セル背景色の編é›?�¯否[true:編é›?�¯/false:編é›?¸�可]を指定しまã�?初期値:false)ã€?
261             *
262             * @og.tag
263             * セル背景色の編é›?�¯否[true:編é›?�¯/false:編é›?¸�可]を指定しますã?
264             * これは、mode="Value" で、writable="true" の場合ã?み有効ですã?
265             * false にすると、COLOR属æ?の編é›?�Œできなくなりますã?
266             * (adjustMatrix.jsの)初期値は、false:編é›?¸�可 ですã?
267             *
268             * @param   editColor セル背景色の編é›?�¯否[true/false]
269             */
270            public void setEditColor( final String editColor ) {
271                    tag.add( "editColor",StringUtil.nval( getRequestParameter( editColor ),null ) );
272            }
273    
274            /**
275             * 【TAG】セル名称と設定å?の間ã?区åˆ?‚Šæ–?­—をæŒ?®šしまã�?初期値:":")ã€?
276             *
277             * @og.tag
278             * 画面上には、セル名称(CELLNAME)と設定å?(VALUE)が表示されますã?そã?時ã?、区åˆ?‚Šæ–?­—をæŒ?®šしますã?
279             * (adjustMatrix.jsの)初期値はã€?:" ですã?
280             *
281             * @param   separator 区åˆ?‚Šæ–?­?
282             */
283            public void setSeparator( final String separator ) {
284                    tag.add( "separator",StringUtil.nval( getRequestParameter( separator ),null ) );
285            }
286    
287            /**
288             * 【TAG】セルの設定å?(VALUE)を指定しまã�?初期値:"")ã€?
289             *
290             * @og.tag
291             * セルの設定å?(VALUE)を指定しますã?
292             *
293             * @param   paramVal セルの設定å?
294             */
295            public void setParamVal( final String paramVal ) {
296                    tag.add( "paramVal",StringUtil.nval( getRequestParameter( paramVal ),null ) );
297            }
298    
299            /**
300             * 【TAG】セルの背景色(COLOR)を指定しまã�?初期値:"")ã€?
301             *
302             * @og.tag
303             * セルの背景色を指定しますã?
304             *
305             * @param   paramColor セルの背景色
306             */
307            public void setParamColor( final String paramColor ) {
308                    tag.add( "paramColor",StringUtil.nval( getRequestParameter( paramColor ),null ) );
309            }
310    
311            /**
312             * 【TAG】編é›?¸�可のセルの背景色を指定しまã�?初期値:gray)ã€?
313             *
314             * @og.tag
315             * 編é›?¸�可のセルの背景色を指定しますã?
316             * (adjustMatrix.jsの)初期値はã€?gray" ですã?
317             *
318             * @param   notEditBgColor 編é›?¸�可のセルの背景色
319             */
320            public void setNotEditBgColor( final String notEditBgColor ) {
321                    tag.add( "notEditBgColor",StringUtil.nval( getRequestParameter( notEditBgColor ),null ) );
322            }
323    
324            /**
325             * タグの名称をã?返しますã?
326             * 自åˆ??身のクラス名よりã?自動的に取り出せなã�?�Ÿめã?こã?メソãƒ?ƒ‰をオーバã?ライドしますã?
327             *
328             * @return  タグの名称
329             */
330            @Override
331            protected String getTagName() {
332                    return "iMatrix" ;
333            }
334    
335            /**
336             * こã?オブジェクトã?æ–?­—å?表現を返しますã?
337             * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
338             *
339             * @return こã?クラスのæ–?­—å?表現
340             */
341            @Override
342            public String toString() {
343                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
344                                    .println( "VERSION"             ,VERSION        )
345                                    .println( "tag"                 ,tag.makeTag()  )
346                                    .println( "Other..."    ,getAttributes().getAttribute() )
347                                    .fixForm().toString() ;
348            }
349    }