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    }