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 */
016package org.opengion.fukurou.util;
017
018
019/**
020 * 個々のエラーメッセージを持っておくためのオブジェクトです。
021 * このオブジェクトは、不変オブジェクトです。
022 * 内部には、行番号とIDと結果と、メッセージリソースで使用される引数を持っています。
023 * 結果は 0:正常 1:警告 2:異常 8:EXCEPTION 9:ORACLEエラーで、
024 * ErrorMessageクラスの public static 変数で定義されている値を使用します。
025 *
026 * @og.group エラー処理
027 *
028 * @version  4.0
029 * @author   Kazuhiko Hasegawa
030 * @since    JDK5.0,
031 */
032public final class ErrMsg {
033        /** バッファの初期容量を通常より多い目に設定します。  {@value}  */
034        public static final int BUFFER_MIDDLE = 200;                                                    // 5.1.9.0 (2010/08/01) 追加
035
036        private final int no;                   // 行番号
037        private final int kekka;                // 結果 0:正常 1:警告 2:異常 8:EXCEPTION 9:ORACLEエラー
038        private final String id;                // メッセージID
039        private final String[] args ;   // メッセージの引数配列
040        private final String pg;                // PG名 3.8.9.5 (2007/09/12)
041        private final String step;              // ステップ名 3.8.9.5 (2007/09/12)
042
043        /**
044         *  必要な引数をすべて設定して、ErrMsg オブジェクトを構築します。
045         *
046         * @param       no      行番号
047         * @param       kekka   結果 0:正常 1:警告 2:異常 8:EXCEPTION 9:ORACLEエラー
048         * @param    pg PG名
049         * @param    step STEP名
050         * @param       id      メッセージID
051         * @param    inArgs String... メッセージIDの引数
052         */
053        public ErrMsg( final int no,final int kekka,
054                                        final String pg,final String step,
055                                        final String id,final String... inArgs) {
056                this.no = no;
057                this.kekka = kekka;
058                this.id = id;
059                int cnt = inArgs.length;
060                args = new String[cnt];
061                for( int i=0; i<cnt; i++ ) {
062                        args[i] = argIn( inArgs[i] );
063                }
064                this.pg = pg;           // 3.8.9.5 (2007/09/12)
065                this.step = step;       // 3.8.9.5 (2007/09/12)
066        }
067
068        /**
069         *  行番号のみ異なる、新しい ErrMsg オブジェクトを作成します。
070         *
071         * @param    newNo 行番号
072         *
073         * @return   行番号のみ異なる、新しい ErrMsgオブジェクト
074         */
075        public ErrMsg copy( final int newNo ) {
076                return new ErrMsg( newNo,kekka,pg,step,id,args );
077        }
078
079        /**
080         *  行番号を返します。
081         *
082         * @return   行番号
083         */
084        public int getNo() { return no; }
085
086        /**
087         *  結果を返します。
088         *
089         * @return   結果 0:正常 1:警告 2:異常 8:EXCEPTION 9:ORACLEエラー
090         */
091        public int getKekka() { return kekka; }
092
093        /**
094         *  メッセージIDを返します。
095         *
096         * @return   メッセージID
097         */
098        public String getId() { return id; }
099
100        /**
101         *  メッセージ引数を返します。
102         *
103         * @param    no 引数アドレス
104         *
105         * @return   メッセージ引数
106         */
107        public String getArg( final int no ) { return args[no]; }
108
109        /**
110         *  メッセージ引数配列を返します。
111         *
112         * @return   メッセージ引数配列
113         */
114        public String[] getArgs() { return args.clone(); }
115
116        /**
117         * 引数について、{#XXXX} 文字列の場合、#XXXX に変換します。
118         * この、{#XXXX} 文字列は、メッセージリソースの引数に、XXXX の
119         * ラベルリソースを適用させる場合に使用します。
120         * この処理は、メッセージリソースでの処理で互換性を確保する為です。
121         * なお、この変更のために、普通に、#YYYY と指定した文字列も、
122         * ラベルキーとして処理されるようになりますので、ご注意ください。
123         *
124         * @og.rev 4.0.0.0 (2005/01/31) 新規作成
125         *
126         * @param    arg        入力引数
127         *
128         * @return   変換後引数
129         */
130        private String argIn( final String arg ) {
131                if( arg != null && arg.startsWith( "{#" ) ) {
132                        return arg.substring( 1,arg.length()-1 ) ;
133                }
134                else {
135                        return arg ;
136                }
137        }
138
139        /**
140         *  PG名を返します。
141         *
142         * @og.rev  3.8.9.5 (2007/09/12) 新規作成
143         *
144         * @return   PG名
145         */
146        public String getPg() { return pg; }
147
148        /**
149         *  ステップ名を返します。
150         *
151         * @og.rev  3.8.9.5 (2007/09/12) 新規作成
152         *
153         * @return   ステップ名
154         */
155        public String getStep() { return step; }
156
157        /**
158         *  デバッグ用のオブジェクトの内部表現の文字列を返します。
159         *
160         * @og.rev 4.0.0.0 (2004/12/31) 内部表現を文字のみとする。
161         *
162         * @return   内部表現の文字列
163         */
164        @Override
165        public String toString() {
166                StringBuilder buf = new StringBuilder( BUFFER_MIDDLE );
167                buf.append( "id=[" ).append( id ).append( "] no=[" ).append( no ).append( "]" );
168                buf.append( " kekka=[" ).append( kekka ).append( "] values={" );
169                for( int i=0; i<args.length; i++ ) {
170                        if( args[i] != null ) {
171                                buf.append( " " ).append( args[i] );
172                        }
173                }
174                buf.append( " }" );
175                return buf.toString();
176        }
177}