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 // カラム==0は、レベルを指定する。 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 // カラム==0は、レベルを指定するので表示しない。 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 // カラム==0は、レベルを指定するので表示しない。 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}