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 }