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 }