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.plugin.view;
017    
018    import org.opengion.hayabusa.common.HybsSystem;
019    
020    /**
021     * JavaScript ã®ãƒ?ƒªãƒ¼éšŽå±¤ã‚’æŒã£ãŸãƒ†ãƒ¼ãƒ–ル表示を行ã†ã€ãƒ„リーãƒ??ブル表示クラスã§ã™ã?
022     *
023     * AbstractViewForm ã«ã‚ˆã‚Šã€setter/getterメソãƒ?ƒ‰ã®ãƒ?ƒ•ォルト実è£?‚’æä¾›ã—ã¦ã?¾ã™ã?
024     * å„HTMLã®ã‚¿ã‚°ã«å¿?¦ãª setter/getterメソãƒ?ƒ‰ã®ã¿?Œè¿½åŠ?®šç¾©ã—ã¦ã?¾ã™ã?
025     *
026     * AbstractViewForm を継承ã—ã¦ã?‚‹ç‚º,ロケールã«å¿œã˜ãŸãƒ©ãƒ™ãƒ«ã‚’å?力ã•ã›ã‚‹äº‹ãŒå‡ºæ¥ã¾ã™ã?
027     *
028     * @og.group ç”»é¢è¡¨ç¤º
029     *
030     * @version  4.0
031     * @author   Kazuhiko Hasegawa
032     * @since    JDK5.0,
033     */
034    public class ViewForm_HTMLTreeBOM extends ViewForm_HTMLTable  {
035            //* ã“ã?プログラãƒ??VERSIONæ–?­—å?を設定ã—ã¾ã™ã?       {@value} */
036            private static final String VERSION = "4.0.0.0 (2005/08/31)" ;
037    
038            public static final String COLUMN_LEVEL_KEY = "COLUMN_LEVEL";
039    
040            // 4.3.4.4 (2009/01/01)
041    //      /**
042    //       * ãƒ?ƒ•ォルトコンストラクター
043    //       *
044    //       */
045    //      public ViewForm_HTMLTreeBOM() {
046    //              super();
047    //      }
048    
049            /**
050             * DBTableModel ã‹ã‚‰ HTMLæ–?­—å?を作æ?ã—ã¦è¿”ã—ã¾ã™ã?
051             * startNo(表示開始ä½ç½®)ã‹ã‚‰ã€pageSize(表示件数)ã¾ã§ã®Viewæ–?­—å?を作æ?ã—ã¾ã™ã?
052             * 表示残りãƒ??ã‚¿ã?pageSize 以下ã?å ´åˆã?,残りã®ãƒ??ã‚¿ã‚’ã™ã¹ã¦å‡ºåŠ›ã—ã¾ã™ã?
053             *
054             * @og.rev 3.5.2.1 (2003/10/27) JavaScript å†??ãƒ?ƒ–ルコーãƒ??ションをシングルコーãƒ??ションã«å¤‰æ›´ã™ã‚‹ã€?
055             * @og.rev 3.9.0.1 (2007/12/18) DBクラスをå?力ã™ã‚‹ã?
056             *
057             * @param  stNo     表示開始ä½ç½®
058             * @param  pgSize   表示件数
059             *
060             * @return  DBTableModelã‹ã‚‰ä½œæ?ã•れã?HTMLæ–?­—å?
061             */
062            @Override
063            public String create( final int stNo, final int pgSize )  {
064                    // ã“ã?クラスã§ã¯ã€ãƒ†ãƒ¼ãƒ–ル全ãƒ??タを使用ã—ã¾ã™ã?
065                    if( getRowCount() == 0 ) { return ""; } // 暫定å?ç½®
066    
067                    int startNo = 0;
068                    int pageSize = getRowCount();
069    
070                    int lastNo = getLastNo( startNo, pageSize );
071    
072                    StringBuilder out = new StringBuilder( HybsSystem.BUFFER_LARGE );
073    
074                    out.append( getHeader() );
075    
076                    int level;
077                    boolean isFld;
078                    int clmCnt = getColumnCount();  // 3.5.5.7 (2004/05/10)
079                    for( int row=startNo; row<lastNo; row++ ) {
080                            // カラãƒ?=?ã?ã€ãƒ¬ãƒ™ãƒ«ã‚’指定ã™ã‚‹ã?
081                            level = Integer.parseInt( getValueLabel(row,0) );
082                            isFld = false;
083                            if( row+1<lastNo ) {
084                                    int nextLevel = Integer.parseInt( getValueLabel(row+1,0) );
085                                    isFld = ( level < nextLevel ) ? true : false ;
086                            }
087                            out.append( getLevelScript( level,isFld ) );
088    
089                            // カラãƒ?=?ã?ã€ãƒ¬ãƒ™ãƒ«ã‚’指定ã™ã‚‹ã?ã§è¡¨ç¤ºã—ãªã??
090                            for(int column = 1; column < clmCnt; column++) {
091                                    if( isColumnDisplay( column ) ) {
092                                            out.append("<td class=\""); // 3.9.0.1 (2007/12/18)
093                                            out.append( getColumnDbType(column) );
094                                            out.append("\"> ");
095                                            out.append( getValueLabel(row,column) );
096                                            out.append("</td>");
097                                    }
098                            }
099                            out.append( "', '', 'gold')" );
100                            if( level != 0 ) {
101                                    out.append( ")" );
102                            }
103                            out.append( HybsSystem.CR );
104                    }
105                    out.append( getFutter() );
106    
107                    return out.toString();
108            }
109    
110            /**
111             * DBTableModel ã‹ã‚‰ ãƒ??ブルã®ãƒ˜ãƒƒãƒ??ã‚¿ã‚°æ–?­—å?を作æ?ã—ã¦è¿”ã—ã¾ã™ã?
112             * JavaScript ã® TreeBody ã§ã¯ã€JavaScriptã«é–¢é€£ã™ã‚‹å®šç¾©ã‚‚ã“ã®ãƒ˜ãƒƒãƒ??ã«
113             * å«ã‚ã¾ã™ã?
114             *
115             * @og.rev 3.5.2.1 (2003/10/27) JavaScript å†??ãƒ?ƒ–ルコーãƒ??ションをシングルコーãƒ??ションã«å¤‰æ›´ã™ã‚‹ã€?
116             * @og.rev 3.9.0.1 (2007/12/18) æ–?­—サイズ変更スクリプト対応ã?ãŸã‚ã€id="viewTable"ã‚’å?åŠ?
117             *
118             * @return  ãƒ??ブルã®ãƒ˜ãƒƒãƒ??ã‚¿ã‚°æ–?­—å?
119             */
120            @Override
121            protected String getHeader() {
122                    StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
123    
124                    buf.append("<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\"  summary=\"bomTable\" id=\"viewTable\">"); // 3.9.0.1 (2007/12/18)
125                    buf.append( HybsSystem.CR );
126                    buf.append("<script type=\"text/javascript\">");
127                    buf.append( HybsSystem.CR );
128                    buf.append("<!--");
129                    buf.append( HybsSystem.CR );
130                    buf.append("aux0 = gFld('");
131                    // カラãƒ?=?ã?ã€ãƒ¬ãƒ™ãƒ«ã‚’指定ã™ã‚‹ã?ã§è¡¨ç¤ºã—ãªã??
132                    int clmCnt = getColumnCount();  // 3.5.5.7 (2004/05/10)
133                    for(int column = 1; column < clmCnt; column++) {
134                            if( isColumnDisplay( column ) ) {
135                                    buf.append("<th>");
136                                    buf.append( getColumnLabel(column) );
137                                    buf.append("</th>");
138                            }
139                    }
140                    buf.append("', '', 'gold')");
141                    buf.append( HybsSystem.CR );
142    
143                    return buf.toString();
144            }
145    
146            /**
147             * DBTableModel ã‹ã‚‰ ãƒ??ブルã®ãƒ•ッタータグæ–?­—å?を作æ?ã—ã¦è¿”ã—ã¾ã™ã?
148             * JavaScript ã® TreeBody ã§ã¯ã€JavaScriptã«é–¢é€£ã™ã‚‹å®šç¾©ã‚‚ã“ã®ãƒ•ッターã«
149             * å«ã‚ã¾ã™ã?
150             *
151             * @return  ãƒ??ブルã®ãƒ•ッタータグæ–?­—å?
152             */
153            protected String getFutter() {
154                    StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
155    
156                    buf.append("initializeDocument()").append( HybsSystem.CR );
157                    buf.append("//-->").append( HybsSystem.CR );
158                    buf.append("</script>").append( HybsSystem.CR );
159                    buf.append("</table>").append( HybsSystem.CR );
160    
161                    return buf.toString();
162            }
163    
164            /**
165             * 行ã?レベルã«å¿œã˜ã?JavaScript関数ã®ãƒ˜ãƒƒãƒ??部åˆ?‚’è¿”ã—ã¾ã™ã?
166             *
167             * @og.rev 3.5.2.1 (2003/10/27) JavaScript å†??ãƒ?ƒ–ルコーãƒ??ションをシングルコーãƒ??ションã«å¤‰æ›´ã™ã‚‹ã€?
168             *
169             * @param       lvl             ãƒ?ƒªãƒ¼ã®ãƒ¬ãƒ™ãƒ«
170             * @param       isFld   フォルãƒ?‹ã©ã?‹[true:フォルãƒ?false:æœ?¸‹å±¤]
171             *
172             * @return      JavaScript関数ã®ãƒ˜ãƒƒãƒ??部åˆ?
173             */
174            private String getLevelScript( final int lvl,final boolean isFld ) {
175    
176                    String auxX = "\taux" + ( lvl );
177                    String auxY = "aux" + ( lvl-1 );
178    
179                    final String rtn ;
180                    if( isFld ) {
181                            rtn = auxX + " = insFld(" + auxY + ", gFld('";
182                    }
183                    else {
184                            rtn = "\tinsFld(" + auxY + ", gLnk('CONTENTS','";
185                    }
186    
187                    return rtn;
188            }
189    }