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