    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 */
    016package org.opengion.plugin.view;
    017
    018import 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 */
    034public 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        /**
    041         * DBTableModel から HTML文字列を作成して返します。
    042         * startNo(表示開始位置)から、pageSize(表示件数)までのView文字列を作成します。
    043         * 表示残りデータが pageSize 以下の場合は,残りのデータをすべて出力します。
    044         *
    045         * @og.rev 3.5.2.1 (2003/10/27) JavaScript 内のダブルコーテーションをシングルコーテーションに変更する。
    046         * @og.rev 3.9.0.1 (2007/12/18) DBクラスを出力する。
    047         *
    048         * @param  stNo     表示開始位置
    049         * @param  pgSize   表示件数
    050         *
    051         * @return  DBTableModelから作成された HTML文字列
    052         */
    053        @Override
    054        public String create( final int stNo, final int pgSize )  {
    055                // このクラスでは、テーブル全データを使用します。
    056                if( getRowCount() == 0 ) { return ""; } // 暫定処置
    057
    058                int startNo = 0;
    059                int pageSize = getRowCount();
    060
    061                int lastNo = getLastNo( startNo, pageSize );
    062
    063                StringBuilder out = new StringBuilder( HybsSystem.BUFFER_LARGE );
    064
    065                out.append( getHeader() );
    066
    067                int level;
    068                boolean isFld;
    069                int clmCnt = getColumnCount();  // 3.5.5.7 (2004/05/10)
    070                for( int row=startNo; row<lastNo; row++ ) {
    071                        // カラム==０は、レベルを指定する。
    072                        level = Integer.parseInt( getValueLabel(row,0) );
    073                        isFld = false;
    074                        if( row+1<lastNo ) {
    075                                int nextLevel = Integer.parseInt( getValueLabel(row+1,0) );
    076                                isFld = level < nextLevel ;
    077                        }
    078                        out.append( getLevelScript( level,isFld ) );
    079
    080                        // カラム==０は、レベルを指定するので表示しない。
    081                        for(int column = 1; column < clmCnt; column++) {
    082                                if( isColumnDisplay( column ) ) {
    083                                        out.append("<td class=\""); // 3.9.0.1 (2007/12/18)
    084                                        out.append( getColumnDbType(column) );
    085                                        out.append("\"> ");
    086                                        out.append( getValueLabel(row,column) );
    087                                        out.append("</td>");
    088                                }
    089                        }
    090                        out.append( "', '', 'gold')" );
    091                        if( level != 0 ) {
    092                                out.append( ")" );
    093                        }
    094                        out.append( HybsSystem.CR );
    095                }
    096                out.append( getFutter() );
    097
    098                return out.toString();
    099        }
    100
    101        /**
    102         * DBTableModel から テーブルのヘッダータグ文字列を作成して返します。
    103         * JavaScript の TreeBody では、JavaScriptに関連する定義もこのヘッダーに
    104         * 含めます。
    105         *
    106         * @og.rev 3.5.2.1 (2003/10/27) JavaScript 内のダブルコーテーションをシングルコーテーションに変更する。
    107         * @og.rev 3.9.0.1 (2007/12/18) 文字サイズ変更スクリプト対応のため、id="viewTable"を出力
    108         *
    109         * @return  テーブルのヘッダータグ文字列
    110         */
    111        @Override
    112        protected String getHeader() {
    113                StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
    114
    115                buf.append("<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\"  summary=\"bomTable\" id=\"viewTable\">"); // 3.9.0.1 (2007/12/18)
    116                buf.append( HybsSystem.CR );
    117                buf.append("<script type=\"text/javascript\">");
    118                buf.append( HybsSystem.CR );
    119                buf.append("<!--");
    120                buf.append( HybsSystem.CR );
    121                buf.append("aux0 = gFld('");
    122                // カラム==０は、レベルを指定するので表示しない。
    123                int clmCnt = getColumnCount();  // 3.5.5.7 (2004/05/10)
    124                for(int column = 1; column < clmCnt; column++) {
    125                        if( isColumnDisplay( column ) ) {
    126                                buf.append("<th>");
    127                                buf.append( getColumnLabel(column) );
    128                                buf.append("</th>");
    129                        }
    130                }
    131                buf.append("', '', 'gold')");
    132                buf.append( HybsSystem.CR );
    133
    134                return buf.toString();
    135        }
    136
    137        /**
    138         * DBTableModel から テーブルのフッタータグ文字列を作成して返します。
    139         * JavaScript の TreeBody では、JavaScriptに関連する定義もこのフッターに
    140         * 含めます。
    141         *
    142         * @return  テーブルのフッタータグ文字列
    143         */
    144        protected String getFutter() {
    145                StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
    146
    147                buf.append("initializeDocument()").append( HybsSystem.CR );
    148                buf.append("//-->").append( HybsSystem.CR );
    149                buf.append("</script>").append( HybsSystem.CR );
    150                buf.append("</table>").append( HybsSystem.CR );
    151
    152                return buf.toString();
    153        }
    154
    155        /**
    156         * 行のレベルに応じた JavaScript関数のヘッダー部分を返します。
    157         *
    158         * @og.rev 3.5.2.1 (2003/10/27) JavaScript 内のダブルコーテーションをシングルコーテーションに変更する。
    159         *
    160         * @param       lvl             ツリーのレベル
    161         * @param       isFld   フォルダかどうか[true:フォルダ/false:最下層]
    162         *
    163         * @return      JavaScript関数のヘッダー部分
    164         */
    165        private String getLevelScript( final int lvl,final boolean isFld ) {
    166
    167                String auxX = "\taux" + ( lvl );
    168                String auxY = "aux" + ( lvl-1 );
    169
    170                final String rtn ;
    171                if( isFld ) {
    172                        rtn = auxX + " = insFld(" + auxY + ", gFld('";
    173                }
    174                else {
    175                        rtn = "\tinsFld(" + auxY + ", gLnk('CONTENTS','";
    176                }
    177
    178                return rtn;
    179        }
    180}