    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        // 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}