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.hayabusa.taglib; 017 018import org.opengion.fukurou.util.ErrMsg; 019import org.opengion.fukurou.util.ErrorMessage; 020import org.opengion.hayabusa.html.ViewForm; 021import org.opengion.hayabusa.html.ViewFormFactory; 022import org.opengion.hayabusa.resource.ResourceManager; 023import org.opengion.hayabusa.db.DBTableModel; 024import org.opengion.hayabusa.db.DBTableModelUtil; 025import org.opengion.hayabusa.db.DBColumn; 026 027import java.util.Arrays; 028import java.util.Comparator; 029 030/** 031 * Taglib で共通的に使用される ユーティリティクラスです。 032 * 033 * 全てのメソッドは、 パッケージプライベートなstatic 宣言されています。 034 * 035 * @og.rev 3.1.1.0 (2003/03/28) 新規作成 036 * @og.group その他部品 037 * 038 * @version 4.0 039 * @author Kazuhiko Hasegawa 040 * @since JDK5.0, 041 */ 042final class TaglibUtil { 043 static final String VIEW_ID = "HYBS_VIEW" ; // 3.5.6.4 (2004/07/16) 044 static final String LINK_ID = "HYBS_LINK" ; // 3.5.6.4 (2004/07/16) 045 static final String MARK_ID = "HYBS_MARK" ; // 3.5.6.4 (2004/07/16) 046 047 private static int tagId = 0; 048 049 // 4.3.2.0 (2008/09/11) 行番号順ソートのための、Comparator オブジェクト 050 private static final Comparator<? super ErrMsg> errComp = 051 new Comparator<ErrMsg>() { 052 public int compare( final ErrMsg err1,final ErrMsg err2 ) { 053 return err1.getNo() - err2.getNo() ; 054 } 055 } ; 056 057 /** 058 * デフォルトコンストラクターをprivateにして、 059 * オブジェクトの生成をさせないようにする。 060 * 061 */ 062 private TaglibUtil() {} 063 064 /** 065 * チェックボックスのラベルを関連つけるための id 値を返します。 066 * 067 * InputTag と OrderByTag 全体で、呼び出される都度に連番をつけて返します。 068 * ユニークな番号になる様にする事が目的なので、99999 で、0 にクリアします。 069 * 別スレッドによる同時アクセスで整合性が破綻(同じ番号が返る)しても、 070 * 問題ありません。(単独のスレッド内でユニークになればよい。) 071 * 072 * @return ユニークな id 値 073 */ 074 static String getTagId() { 075 String id = "ID" + ( tagId++ ); 076 077 if( tagId >= 100000 ) { tagId = 0; } 078 return id ; 079 } 080 081 /** 082 * ErrorMessage オブジェクトと、ResourceManager より、表示用 HTMLテーブルを作成します。 083 * これは、従来,各Taglibパッケージで使用していました、ErrorMessage オブジェクトを、 084 * HTMLテーブル形式で表示する為に、DBUtilクラスや、ViewFormクラスなど、複数のクラスを 085 * 複雑に組み合わせて使用していましたが、一つの static メソッドにまとめたものです。 086 * 087 * @og.rev 3.5.5.2 (2004/04/02) 新規追加 088 * @og.rev 3.5.6.1 (2004/06/25) lang 言語コード 属性を削除します。 089 * @og.rev 3.5.6.2 (2004/07/05) setBgColorCycle の引数定義を変更 090 * @og.rev 3.8.0.4 (2005/08/08) setUseScrollBar の追加(ヘッダー固定のスクロールバーを出さない) 091 * @og.rev 3.8.9.5 (2007/09/12) PG名、ステップ名追加(開発ガイドライン対応) 092 * @og.rev 4.0.0.0 (2005/01/31) ResourceManager getMessage 関数を使用 093 * @og.rev 4.0.0.0 (2007/10/18) メッセージリソース統合( getResource().getMessage ⇒ getResource().getLabel ) 094 * @og.rev 4.3.2.0 (2008/09/11) 行番号順ソート、メッセージのラベル(短)化、コメント出力 095 * @og.rev 4.3.4.5 (2009/01/08) 対応方法(概要説明)が存在すれば表示する 096 * @og.rev 4.3.7.6 (2009/07/15) 対応方法のパラメータ対応 097 * 098 * @param errMsg ErrorMessageオブジェクト 099 * @param resource ResourceManager リソースマネージャー 100 * 101 * @return HTML のテーブルタグに変換後の文字列(無ければ、ゼロストリング) 102 */ 103 static String makeHTMLErrorTable( final ErrorMessage errMsg,final ResourceManager resource ) { 104 if( errMsg == null ) { return ""; } 105 106 final String[] names ; 107 if( errMsg.isSetPgStep() ) { 108 // names = new String[] { "ROW_NO","KEKKA","MSGID","MESSAGE","PG","STEP" }; // 3.8.9.5 (2007/09/12) 109 names = new String[] { "ROW_NO","KEKKA","MSGID","MESSAGE", "PG","STEP" }; // 3.8.9.5 (2007/09/12) 110 } 111 else { 112 names = new String[] { "ROW_NO","KEKKA","MSGID","MESSAGE" }; 113 } 114 115 int clmSize = names.length; 116 117 DBTableModel errTable = DBTableModelUtil.newDBTable(); 118 errTable.init( clmSize ); 119 120 for( int i=0; i<clmSize; i++ ) { 121 DBColumn dbColumn = resource.makeDBColumn( names[i] ); 122 errTable.setDBColumn( i,dbColumn ); 123 } 124 125 // 4.3.2.0 (2008/09/11) 行番号順ソート 126 ErrMsg[] errMsgs = errMsg.toArray(); 127 Arrays.sort( errMsgs, errComp ); 128 129 int tableRow = 0; // 4.3.4.5 (2009/01/08) テーブルモデルの行番号 130 131 for( int i=0; i<errMsg.size(); i++ ) { 132 ErrMsg err = errMsgs[i]; 133 String[] clmVals = new String[clmSize]; 134 clmVals[0] = String.valueOf( err.getNo() ); 135 clmVals[1] = String.valueOf( err.getKekka() ); 136 clmVals[2] = err.getId(); 137 clmVals[3] = resource.getLabel( err ); 138 if( errMsg.isSetPgStep() ) { 139 clmVals[4] = err.getPg(); 140 clmVals[5] = err.getStep(); 141 } 142 errTable.addColumnValues( clmVals ); 143 // errTable.setRowWritable( i,false ); // 書込み禁止 144 errTable.setRowWritable( tableRow, false ); // 4.3.4.5 (2009/01/08) 書込み禁止 145 146 // 対応方法(概要説明)が存在すれば直下に一行追加する 4.3.4.5 (2009/01/08) 147 // String desc = resource.getDescription( clmVals[2] ); 148 String desc = resource.getDescription( err ); // 4.3.7.6 (2009/07/15) 149 if( desc != null && desc.length() > 0 ){ 150 tableRow++; 151 String[] descVals = new String[clmSize]; 152 descVals[3] = desc; 153 errTable.addColumnValues( descVals ); 154 errTable.setRowWritable( tableRow, false ); 155 } 156 157 tableRow++; 158 } 159 160 // ここまでが、DBTableModel の作成。以下は、View での表示 161 162 ViewForm form = ViewFormFactory.newInstance( "HTMLTable" ); 163 164 form.init( errTable ); 165 if( ! errMsg.isOK() ) { // 正常以外 166 form.setBgColorCycle( -1 * errMsg.getKekka() ); // エラー処理時のゼブラ模様 167 form.setNumberType( "delete" ); // 番号欄を出さない。 168 form.setUseTableSorter( false ); // ソート用リンクは出さない。 169 form.setUseScrollBar( false ); // 4.0.0 (2005/01/31) スクロールバー用のDIV要素を出力しない。 170 } 171 172 return form.create(); 173 } 174 175 /** 176 * ErrorMessage オブジェクトと、ResourceManager より、表示用 HTMLテーブルを作成します。 177 * このメソッドでは、エラーメッセージ及びエラーコードを一覧形式で表示します。 178 * 179 * @param errMsg ErrorMessageオブジェクト 180 * @param resource ResourceManager リソースマネージャー 181 * 182 * @return HTML のテーブルタグに変換後の文字列(無ければ、ゼロストリング) 183 */ 184 static String makeHTMLSimpleErrorList( final ErrorMessage errMsg,final ResourceManager resource ) { 185 if( errMsg == null ) { return ""; } 186 187 String[] names = new String[] { "MESSAGE" }; 188 189 int clmSize = names.length; 190 191 DBTableModel errTable = DBTableModelUtil.newDBTable(); 192 errTable.init( clmSize ); 193 194 for( int i=0; i<clmSize; i++ ) { 195 DBColumn dbColumn = resource.makeDBColumn( names[i] ); 196 errTable.setDBColumn( i,dbColumn ); 197 } 198 199 ErrMsg[] errMsgs = errMsg.toArray(); 200 Arrays.sort( errMsgs, errComp ); 201 202 for( int i=0; i<errMsg.size(); i++ ) { 203 ErrMsg err = errMsgs[i]; 204 String[] clmVals = new String[clmSize]; 205 clmVals[0] = resource.getShortLabel( err.getId() ) + "(" + err.getId() + ")"; 206 errTable.addColumnValues( clmVals ); 207 errTable.setRowWritable( i,false ); 208 } 209 210 // ここまでが、DBTableModel の作成。以下は、View での表示 211 ViewForm form = ViewFormFactory.newInstance( "HTMLSimpleList" ); 212 form.init( errTable ); 213 214 if( ! errMsg.isOK() ) { // 正常以外 215 form.setBgColorCycle( -1 * errMsg.getKekka() ); // エラー処理時のゼブラ模様 216 } 217 218 return form.create(); 219 } 220 221 /** 222 * 指定の文字列から、数字部のみ取り出して、変換して返します。 223 * 224 * 例えば、"200px" を 200 に変換します。 225 * 226 * @og.rev 4.0.0.0 (20065/12/05) 新規作成 227 * 228 * @param inStr 入力する文字列 229 * 230 * @return 変換後の数字 231 */ 232 static int changeInt( final String inStr ) { 233 if( inStr == null || inStr.length() == 0 ) { return 0; } 234 235 int adrs; 236 for( adrs=0; adrs<inStr.length(); adrs++ ) { 237 char ch = inStr.charAt(adrs); 238 if( ch < '0' || ch > '9' ) { break; } 239 } 240 241 if( adrs == 0 ) { return 0; } 242 243 return Integer.parseInt( inStr.substring( 0,adrs ) ); 244 } 245 246}