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