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 static org.opengion.fukurou.util.StringUtil.nval;
020    
021    
022    /**
023     * å·¦å³åˆ?‰²ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«å‡¦ç?‚’行ã†ã€View を設定ã—ã¾ã™ã?
024     *
025     * BODY部ã«è¨˜è¿°ã•れã?Viewã‚¿ã‚°ã«å¯¾ã—ã¦ã€å·¦å³åˆ?‰²æƒ??を追記設定ã—ã¾ã™ã?
026     * Viewã‚¿ã‚°ã®å·¦å´ã«ã¯ã€ã“ã®ã‚¿ã‚°ã§æŒ?®šã•れ㟠fixDisplay ã®ã‚«ãƒ©ãƒ?‚’ columnDisplay ã«
027     * 設定ã™ã‚‹ã¨ã¨ã‚‚ã«ã€ã“ã®ã‚¿ã‚°ã§æŒ?®šã•れ㟠numberType ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
028     * (åˆæœŸå€¤ã¯ã€numberType="sequence" ã§ã™ã?)
029     * Viewã‚¿ã‚°ã®å³å´ã«ã¯ã€fixDisplay ã®ã‚«ãƒ©ãƒ?‚’ noDisplay ã®ã‚«ãƒ©ãƒ?«è¨­å®šã™ã‚‹ã¨ã¨ã‚‚ã«ã€?
030     * command="VIEW" , noMessage="true" , useSelectedRow="false" , numberType="delete"
031     * ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?(既存ã?設定å?ãŒã‚れã?ã€ãれã«è¿½è¨˜ã•れã¾ã™ã?)
032     *
033     * @og.formSample
034     * â—å½¢å¼ï¼?lt;og:splitView  fixDisplay="CLM,NAME_JA"><og:view ・・・  /></og:splitView>
035     * â—body?šã‚ã‚?
036     *
037     * â—Tag定義??
038     *   <og:splitView
039     *       fixDisplay         ã€TAG】固定ã™ã‚‹ã‚«ãƒ©ãƒ?ã‚’ã?CSVå½¢å¼?カンマ区åˆ?‚Šæ–?­—å?)ã§è¨­å®šã—ã¾ã?
040     *       debug              ã€TAG】デãƒãƒƒã‚°æƒ??ã‚’å?力ã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false)
041     *   >   ... Body ...
042     *   </og:splitView>
043     *
044     * â—使用ä¾?
045     *    <og:splitView fixDisplay="CLM,NAME_JA">
046     *      <og:view
047     *          viewFormType    = "HTMLTable"
048     *          command         = "{@command}"
049     *          checked         = "{@checked}"
050     *          startNo         = "{@startNo}"
051     *          pageSize        = "{@pageSize}"
052     *          noWritable      = "{@noWritable}"
053     *          columnWritable  = "{@columnWritable}"
054     *      />
055     *    </og:splitView>
056     *
057     * @og.rev 5.3.0.0 (2010/12/01) æ–°è¦ä½œæ?
058     * @og.group ç”»é¢éƒ¨å“?
059     *
060     * @version  4.0
061     * @author       Kazuhiko Hasegawa
062     * @since    JDK5.0,
063     */
064    public class SplitViewTag extends CommonTagSupport {
065            //* ã“ã?プログラãƒ??VERSIONæ–?­—å?を設定ã—ã¾ã™ã?       {@value} */
066            private static final String VERSION = "5.3.0.0 (2010/12/01)" ;
067    
068            private static final long serialVersionUID = 530020101201L ;
069    
070            private static final String SPLIT_A =
071                                      "<style type=\"text/css\">#GantBody div tr { height:22px; }</style>"                              + HybsSystem.CR
072                                    + "<table id=\"GantBody\" border=\"0px\" cellpadding=\"0px\" cellspacing=\"0px\""    + HybsSystem.CR
073                                    + "       frame=\"box\" rules=\"all\" style=\"margin:0px;padding:0px;\">"                    + HybsSystem.CR
074                                    + "  <tr style=\"margin:0px;padding:0px;\">"                                                                              + HybsSystem.CR
075                                    + "    <td valign=\"top\" style=\"margin:0px; padding:0px;\" >"                                           + HybsSystem.CR
076                                    + "      <div id=\"X1\" style=\"overflow-x:hidden; overflow-y:hidden;\" >"                        + HybsSystem.CR ;
077    
078            private static final String SPLIT_B =
079                                      "      </div>"                                                                                                  + HybsSystem.CR
080                                    + "    </td>"                                                                                                             + HybsSystem.CR
081                                    + "    <td  valign=\"top\" style=\"margin:0px; padding:0px;\">"           + HybsSystem.CR
082                                    + "      <div id=\"X2\" style=\"position:absolute; overflow-x:hidden; overflow-y:hidden;\" >" + HybsSystem.CR ;
083    
084            private static final String SPLIT_C =
085                                      "       </div>"         + HybsSystem.CR
086                                    + "    </td>"                     + HybsSystem.CR
087                                    + "  </tr>"                               + HybsSystem.CR
088                                    + "</table>"                      + HybsSystem.CR ;
089    
090            private String  fixDisplay    = null;
091            private boolean firstStepFlag = true;           // BODY部㮠view 処ç??制御
092    
093            /**
094             * Taglibã®é–‹å§‹ã‚¿ã‚°ãŒè¦‹ã¤ã‹ã£ãŸã¨ãã«å‡¦ç?™ã‚?doStartTag() ã‚?オーãƒã?ライドã—ã¾ã™ã?
095             *
096             * @return      後続å?ç??æŒ?¤º( EVAL_BODY_BUFFERED )
097             */
098            @Override
099            public int doStartTag() {
100                    firstStepFlag = true;
101                    // EVAL_BODY_BUFFERED ã§ã¯ãªãã?Viewãªã®ã§ã€INCLUDE 処ç?—ã¾ã™ã?
102                    jspPrint( SPLIT_A );
103                    return( EVAL_BODY_INCLUDE );    // Body インクルー� extends TagSupport �
104            }
105    
106            /**
107             * Taglibã®ã‚¿ã‚°æœ¬ä½“を処ç?™ã‚?doAfterBody() ã‚?オーãƒã?ライドã—ã¾ã™ã?
108             *
109             * @return      後続å?ç??æŒ?¤º(SKIP_BODY)
110             */
111            @Override
112            public int doAfterBody() {
113                    // EVAL_BODY_INCLUDE ãªã®ã§ã€ã‚³ãƒ³ãƒ?ƒ³ãƒ??å–å¾—ã§ã¯ãªãã?処ç??ã¿å®Ÿè¡Œã•れã¾ã™ã?
114    
115                    if( firstStepFlag ) {
116                            firstStepFlag = false;
117    
118                            jspPrint( SPLIT_B );
119                            return( EVAL_BODY_BUFFERED );   // ボディーをå?評価( extends BodyTagSupport æ™?
120                    }
121                    else {
122                            jspPrint( SPLIT_C );
123                            return(SKIP_BODY);                              // Body を評価ã—ãªã?
124                    }
125            }
126    
127            /**
128             * タグリブオブジェクトをリリースã—ã¾ã™ã?
129             * キャãƒ?‚·ãƒ¥ã•れã¦å†åˆ©ç”¨ã•れるã?ã§ã€ãƒ•ィールドã?åˆæœŸè¨­å®šã‚’行ã„ã¾ã™ã?
130             *
131             */
132            @Override
133            protected void release2() {
134                    super.release2();
135                    fixDisplay = null;
136            }
137    
138            /**
139             * ã€TAG】固定ã™ã‚‹ã‚«ãƒ©ãƒ?ã‚’ã?CSVå½¢å¼?カンマ区åˆ?‚Šæ–?­—å?)ã§è¨­å®šã—ã¾ã™ã?
140             *
141             * @og.tag
142             * Viewã‚¿ã‚°ã®å·¦å´(固定部)ã«ã¯ã€ã“ã®ã‚¿ã‚°ã§æŒ?®šã•れ㟠fixDisplay ã®ã‚«ãƒ©ãƒ?‚’
143             * columnDisplay ã«è¨­å®šã—ã¾ã™ã?
144             * Viewã‚¿ã‚°ã®å³å´ã«ã¯ã€fixDisplay ã®ã‚«ãƒ©ãƒ?‚’ noDisplay ã®ã‚«ãƒ©ãƒ?«è¨­å®šã—ã¾ã™ã?
145             * 既存ã?設定å?(noDisplay)ãŒã‚れã?ã€ãれã«è¿½è¨˜ã•れã¾ã™ã?
146             *
147             * @param   clms 固定ã™ã‚‹ã‚«ãƒ©ãƒ?(カンマ区åˆ?‚Šæ–?­—å?)
148             */
149            public void setFixDisplay( final String clms ) {
150                    fixDisplay = nval( getRequestParameter( clms ),fixDisplay );
151            }
152    
153            /**
154             * 固定ã™ã‚‹ã‚«ãƒ©ãƒ?ã‚’ã?CSVå½¢å¼?カンマ区åˆ?‚Šæ–?­—å?)ã§å–å¾—ã—ã¾ã™ã?
155             *
156             * ã“れã¯ã€BODY部ã«è¨˜è¿°ã•れãŸã?viewã‚¿ã‚°ã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã•れるメソãƒ?ƒ‰ã§ã™ã?
157             * 設定ã•れã¦ã?ªã??åˆã?ã€null ã§ã™ã?
158             *
159             * @return      固定ã™ã‚‹ã‚«ãƒ©ãƒ?(カンマ区åˆ?‚Šæ–?­—å?)
160             */
161            protected String getFixDisplay() {
162                    return fixDisplay ;
163            }
164    
165            /**
166             * BODY部㮠view 処ç??制御を行ã†ãŸã‚ã®ãƒ•ラグを返ã—ã¾ã™ã?
167             *
168             * å·¦å³åˆ?‰²ã‚’行ã†ã«ã¯ã€Viewタグを2回出力ã™ã‚‹å¿?¦ãŒã‚りã¾ã™ã?
169             * ã“ã“ã§ã¯ isFirstStep="true" ãŒï¼‘回目(å·¦å´:固定部)ã§ã€false ã?
170             * å³å´(å¯å¤‰éƒ¨)ã«ãªã‚‹ã‚ˆã?«ã€Viewå´ã§åˆ¶å¾¡ã—ã¾ã™ã?
171             *
172             * @return      BODY部㮠view 処ç??制御(true:?‘回目 / false:?’回目)
173             */
174            protected boolean isFirstStep() {
175                    return firstStepFlag ;
176            }
177    
178            /**
179             * ã“ã?オブジェクトã?æ–?­—å?表ç¾ã‚’è¿”ã—ã¾ã™ã?
180             * 基本çš?«ãƒ?ƒãƒ?‚°ç›®çš?«ä½¿ç”¨ã—ã¾ã™ã?
181             *
182             * @return ã“ã?ã‚¯ãƒ©ã‚¹ã®æ–?­—å?表ç¾
183             */
184            @Override
185            public String toString() {
186                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
187                                    .println( "VERSION"                     ,VERSION        )
188                                    .println( "fixDisplay"          ,fixDisplay     )
189                                    .println( "Other..."    ,getAttributes().getAttribute() )
190                                    .fixForm().toString() ;
191            }
192    }