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    }