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.fukurou.util;
017    
018    import java.util.List;
019    import java.util.ArrayList;
020    
021    
022    /**
023     * エラーメãƒ?‚»ージを受け渡すときに使用するクラスですã?
024     * 結果値としてã€?:正常 1:警å‘?2:異常 8:EXCEPTION 9:ORACLEエラー を持ってã�?�¾すã?
025     *
026     * @og.group エラー処ç�?
027     *
028     * @version  4.0
029     * @author   Kazuhiko Hasegawa
030     * @since    JDK5.0,
031     */
032    public final class ErrorMessage {
033            /** 改行コーãƒ?*/
034            public static final String CR = System.getProperty("line.separator");   // 5.1.9.0 (2010/08/01) 追åŠ?
035    
036            /** バッファの初期容量を通常より多い目に設定しますã?  {@value}  */
037            public static final int BUFFER_MIDDLE = 200;                                                    // 5.1.9.0 (2010/08/01) 追åŠ?
038    
039            /** 結果値 0:正常 {@value} */
040            public static final int OK        = 0;
041            /** 結果値 1:警å‘?{@value} */
042            public static final int WARNING   = 1;
043            /** 結果値 2:異常 {@value} */
044            public static final int NG        = 2;
045            /** 結果値 8:EXCEPTION {@value} */
046            public static final int EXCEPTION = 8;
047            /** 結果値 9:ORACLEエラー {@value} */
048            public static final int ORCL_ERR  = 9;
049    
050            private int                     maxKekka        = OK;
051            private String          title           = "";
052            private final List<ErrMsg> list   = new ArrayList<ErrMsg>();
053    
054            private boolean  setPgStep = false; // 3.8.9.5 (2007/09/12)
055    
056            /**
057             * ãƒ?ƒ•ォルトコンストラクター
058             * 詳細メãƒ?‚»ージを指定しなã�?�§ ErrorMessage を構築しますã?
059             * (明示しなã�?�¨、引き通付きコンストラクタのみのクラスになってしまã�?�¾すã?)
060             */
061            public ErrorMessage() {
062                    setTitle( "NO TITLE" );
063            }
064    
065            /**
066             * タイトルを指定して ErrorMessage を構築しますã?
067             *
068             * @param       title   タイトル
069             */
070            public ErrorMessage( final String title ) {
071                    setTitle( title );
072            }
073    
074            /**
075             * æŒ?®šされたエラーæƒ??を追åŠ?™»録しますã?
076             * これは、行番号?�ã?結果?šNG IDは無ã�?ゼロæ–?­—å?)ですã?
077             *
078             * @param    args String... メãƒ?‚»ージの引数(可変引数)
079             */
080            public void addMessage( final String... args ) {
081                    addMessage( 0,NG,"",args );
082            }
083    
084            /**
085             * æŒ?®šされたエラーæƒ??を追åŠ?™»録しますã?
086             *
087             * @param       no      行番号
088             * @param       kekka   結果 0:正常 1:警å‘?2:異常
089             * @param       id      メãƒ?‚»ージID
090             * @param    args String... メãƒ?‚»ージの引数(可変引数)
091             */
092            public void addMessage( final int no,final int kekka,final String id,final String... args ) {
093                    if( id != null ) {
094                            ErrMsg msg = new ErrMsg( no,kekka,null,null,id,args );
095                            list.add( msg );
096                            if( maxKekka < kekka ) {  maxKekka = kekka; }
097                    }
098            }
099    
100            /**
101             * æŒ?®šされたエラーオブジェクトを追åŠ?™»録しますã?
102             * 追åŠ?�™るErrMsgがã?å†?ƒ¨の結果値より大きい場合ã?、その結果値にセãƒ?ƒˆしますã?
103             * つまりã?å†?ƒ¨結果値は、登録されたすべてのエラーオブジェクトã?æœ?¤§値ですã?
104             *
105             * @param       msg     エラーオブジェクãƒ?
106             */
107            public void addMessage( final ErrMsg msg ) {
108                    list.add( msg );
109                    if( maxKekka < msg.getKekka() ) {  maxKekka = msg.getKekka(); }
110                    if( msg.getPg() != null || msg.getStep() != null ) { setPgStep = true; }  // 3.8.9.5 (2007/09/12)
111            }
112    
113            /**
114             * æŒ?®šされた ErrorMessageオブジェクトを追åŠ?™»録しますã?
115             * タイトルはå…??まま変わりませんã€?
116             * 現状の ErrorMessage の続きに、追åŠ?�—てã�?��ますã?
117             * 引数の ErrorMessageオブジェクãƒ?ã�?null の場合ã?,何もしませんã€?
118             *
119             * @param   msg ErrorMessageオブジェクãƒ?
120             */
121            public void append( final ErrorMessage msg ) {
122                    if( msg != null ) {
123                            if( maxKekka < msg.getKekka() ) {  maxKekka = msg.getKekka(); }
124    
125                            ErrMsg[] emsg = msg.toArray();
126                            for( int i=0; i<emsg.length; i++ ) {
127                                    list.add( emsg[i] );
128                            }
129                    }
130            }
131    
132            /**
133             * æŒ?®šされた ErrorMessageオブジェクトを行番号æŒ?®šで追åŠ?™»録しますã?
134             * タイトルはå…??まま変わりませんã€?
135             * 現状の ErrorMessage の続きに、追åŠ?�—てã�?��ますã?
136             * 引数の ErrorMessageオブジェクãƒ?ã�?null の場合ã?,何もしませんã€?
137             *
138             * @param       no      行番号
139             * @param   msg ErrorMessageオブジェクãƒ?
140             */
141            public void append( final int no,final ErrorMessage msg ) {
142                    if( msg != null ) {
143                            if( maxKekka < msg.getKekka() ) {  maxKekka = msg.getKekka(); }
144    
145                            ErrMsg[] emsg = msg.toArray();
146                            for( int i=0; i<emsg.length; i++ ) {
147                                    list.add( emsg[i].copy( no ) );
148                            }
149                    }
150            }
151    
152            /**
153             *  こã?リストå?の要ç´?‚’適åˆ?�ªé ?º�で繰り返し処ç�?�™る反復子を返しますã?
154             *
155             * @og.rev 4.0.0.0 (2004/12/31) 新規追åŠ?
156             * @og.rev 4.3.2.0 (2008/09/11) private â‡?public に変更ã€?
157             *
158             * @return  すべての要ç´?‚’正しいé ?º�で保持するErrMsg配å?
159             */
160    //      private ErrMsg[] toArray() {
161            public ErrMsg[] toArray() {
162                    return list.toArray( new ErrMsg[list.size()] ) ;
163            }
164    
165            /**
166             * リストå?のキーと値のマッピングの数を返しますã?
167             *
168             * @return   リストå?の size
169             */
170            public int size() {
171                    return list.size() ;
172            }
173    
174            /**
175             *  タイトルを返しますã?
176             *
177             * @return   タイトル
178             */
179            public String getTitle() {
180                    return title;
181            }
182    
183            /**
184             *  タイトルをセãƒ?ƒˆしますã?
185             *
186             * @param       title   タイトル
187             */
188            public void setTitle( final String title ) {
189                    this.title = title;
190            }
191    
192            /**
193             *  æŒ?®šã?行ã?位置のエラー行番号を返しますã?
194             *
195             * @og.rev 4.3.2.0 (2008/09/11) å»?­¢
196             *
197             * @param    row 行ã?位置
198             *
199             * @return   行番号
200             */
201    //      public int getNo( final int row ) {
202    //              return list.get(row).getNo();
203    //      }
204    
205            /**
206             *  æŒ?®šã?行ã?位置のエラーオブジェクトを返しますã?
207             *
208             * @og.rev 4.0.0.0 (2004/12/31) 新規追åŠ?
209             * @og.rev 4.3.2.0 (2008/09/11) å»?­¢
210             *
211             * @param    row 行ã?位置
212             *
213             * @return   エラーオブジェクãƒ?
214             */
215    //      public ErrMsg getErrMsg( final int row ) {
216    //              return list.get(row);
217    //      }
218    
219            /**
220             *  こã?エラーメãƒ?‚»ージの中で、最大の結果値(エラーのæœ?¤§レベル)を返しますã?
221             *
222             * @return   結果   OK, WARNING, NG, ORCL_ERR
223             */
224            public int getKekka() {
225                    return maxKekka;
226            }
227    
228            /**
229             *  æŒ?®šã?行ã?位置の結果を返しますã?
230             *
231             * @og.rev 4.3.2.0 (2008/09/11) å»?­¢
232             *
233             * @param    row 行ã?位置
234             *
235             * @return   結果  OK, WARNING, NG, EXCEPTION , ORCL_ERR
236             */
237    //      public int getKekka( final int row ) {
238    //              return list.get(row).getKekka();
239    //      }
240    
241            /**
242             *  すべてのメãƒ?‚»ージã�?正常(OK)かを返しますã?
243             *
244             * @return   結果 すべてOK?štrue / それ以å¤?false
245             */
246            public boolean isOK() {
247                    return ( maxKekka == OK );
248            }
249    
250            /**
251             *  æŒ?®šã?行ã?位置のエラーコードIDを返しますã?
252             *
253             * @og.rev 4.3.2.0 (2008/09/11) å»?­¢
254             *
255             * @param    row 行ã?位置
256             *
257             * @return   エラーコードID
258             */
259    //      public String getId( final int row ) {
260    //              return list.get(row).getId();
261    //      }
262    
263            /**
264             *  æŒ?®šã?行ã?位置のPG名を返しますã?
265             *
266             * @og.rev 3.8.9.5 (2007/09/12) 新規作æ?
267             * @og.rev 4.3.2.0 (2008/09/11) å»?­¢
268             *
269             * @param    row 行ã?位置
270             *
271             * @return   PG�
272             */
273    //      public String getPg( final int row ) {
274    ////            return ((ErrMsg)list.get(row)).getPg();
275    //              return (list.get(row)).getPg();         // 4.0.0.0 (2007/09/25)
276    //      }
277    
278            /**
279             *  æŒ?®šã?行ã?位置のスãƒ?ƒƒプ名を返しますã?
280             *
281             * @og.rev 3.8.9.5 (2007/09/12) 新規作æ?
282             * @og.rev 4.3.2.0 (2008/09/11) å»?­¢
283             *
284             * @param    row 行ã?位置
285             *
286             * @return   スãƒ?ƒƒプ名
287             */
288    //      public String getStep( final int row ) {
289    ////            return ((ErrMsg)list.get(row)).getStep();
290    //              return (list.get(row)).getStep();               // 4.0.0.0 (2007/09/25)
291    //      }
292    
293            /**
294             *  配å?中にPG名またã?スãƒ?ƒƒプ名が設定されてã�?‚‹かを返しますã?
295             *
296             * @og.rev 3.8.9.5 (2007/09/12) 新規作æ?
297             *
298             * @return   PG名またã?スãƒ?ƒƒプ名が設定されてã�?‚‹ã�?
299             */
300            public boolean isSetPgStep() {
301                    return setPgStep;
302            }
303    
304            /**
305             *  メãƒ?‚»ージの連結リストを返しますã?
306             *
307             * @return   メãƒ?‚»ージの連結リスãƒ?
308             */
309            @Override
310            public String toString() {
311    //              StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
312                    StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE );
313    //              rtn.append( getTitle() ).append( HybsSystem.CR );
314                    rtn.append( getTitle() ).append( CR );
315                    ErrMsg[] msg = list.toArray( new ErrMsg[list.size()] );
316                    for( int i=0; i<msg.length; i++ ) {
317                            rtn.append( msg[i] );
318    //                      rtn.append( HybsSystem.CR );
319                            rtn.append( CR );
320                    }
321                    return rtn.toString();
322            }
323    }